2011-08-24 18 views
5

मेरे पास एक प्रोजेक्ट है जिसमें मैं कुछ नियंत्रण पर टूलटिप प्राप्त करने में सक्षम होना चाहता हूं जो टेक्स्टबॉक्स और डेटपिकर जैसे कुछ नियंत्रणों को उजागर करेगा। विचार सीमित ग्राफिक के साथ कुछ प्रकार की पॉपअप विंडो होगी लेकिन कुछ नियंत्रण आप बातचीत करेंगे।नियंत्रण के साथ WPF टूलटिप

मुझे पता है कि नियंत्रण में 'सामान्य' टूलटिप कैसे जोड़ना है, लेकिन जब आप आगे बढ़ते हैं, तो टूलटिप डिसपियर होता है इसलिए मैं इसके साथ बातचीत नहीं कर सकता।

क्या यह संभव है? यदि ऐसा है तो कैसे और यदि नहीं, क्या इसका कोई विकल्प है?

धन्यवाद

उत्तर

10

आप एक ToolTip

उदाहरण के बजाय एक Popup उपयोग करना चाहिए। एक Popup खोला जाता है जब TextBox पर माउस चाल और जब तक माउस TextBox या Popup

<TextBox Name="textBox" 
     Text="Popup On Mouse Over" 
     HorizontalAlignment="Left"/> 
<Popup PlacementTarget="{Binding ElementName=textBox}" 
     Placement="Bottom"> 
    <Popup.IsOpen> 
     <MultiBinding Mode="OneWay" Converter="{StaticResource BooleanOrConverter}"> 
      <Binding Mode="OneWay" ElementName="textBox" Path="IsMouseOver"/> 
      <Binding RelativeSource="{RelativeSource Self}" Path="IsMouseOver" /> 
     </MultiBinding> 
    </Popup.IsOpen> 
    <StackPanel> 
     <TextBox Text="Some Text.."/> 
     <DatePicker/> 
    </StackPanel> 
</Popup> 

खत्म हो गया है खोलने रहता है एक BooleanOrConverter

public class BooleanOrConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     foreach (object booleanValue in values) 
     { 
      if (booleanValue is bool == false) 
      { 
       throw new ApplicationException("BooleanOrConverter only accepts boolean as datatype"); 
      } 
      if ((bool)booleanValue == true) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

अद्यतन
करने के लिए उपयोग करता है DataGrid में सेल के लिए ऐसा करें आपके पास कुछ विकल्प हैं। उनमें से दो Popup के अंदर DataGridTemplateColumn के लिए जोड़ना है, या आप इसे DataGridCell Template पर जोड़ सकते हैं। बाद में इसका एक उदाहरण यहां दिया गया है। यह आपको स्थापित करने के लिए SelectionMode = "एकल" और SelectionUnit = "सेल" DataGrid

<DataGrid SelectionMode="Single" 
      SelectionUnit="Cell" 
      ...> 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridCell}"> 
         <Grid> 
          <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
           <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
          </Border> 
          <Popup PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
            Placement="Right" 
            IsOpen="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected}"> 
           <StackPanel> 
            <TextBox Text="Some Text.."/> 
            <DatePicker/> 
           </StackPanel> 
          </Popup> 
         </Grid>         
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style>  
    </DataGrid.CellStyle> 
    <!--...--> 
</DataGrid> 
+0

पर यह एक DatagridRow पर किया जा सकता है की आवश्यकता होगी या मैं बजाय एक TextBlock के साथ एक TemplateColumn इस्तेमाल करना चाहिए? –

+0

निश्चित रूप से, आप इसे कैसे काम करना चाहते हैं? 'पॉपअप' कब दिखाना चाहिए? –

+0

जब कोई सेल चुना जाता है तो मैं पॉपअप खोलना चाहता हूं। जब यह किया जाता है तो विकल्पों के साथ एक छोटा पॉपअप उपलब्ध होगा। –

संबंधित मुद्दे