2010-08-18 15 views
8

पर सशर्त दृश्यता जोड़ना मैं एक टेक्स्टब्लॉक टूलटिप को सशर्त रूप से दृश्यमान बनाना चाहता हूं।WPF नियंत्रण टूलटिप

मैं टूलटिप के रूप में परिभाषित किया है:

<TextBlock> 
    <TextBlock.ToolTip> 
     <Grid>...</Grid> 
    </TextBlock.ToolTip> 
</TextBlock> 

जहां दृश्यता संपत्ति है कि परिभाषा जाना चाहते हैं? यह मेरे किसी भी अनुमान की तरह प्रतीत नहीं होता है।

ग्रिड दृश्यता के साथ काम करने के कुछ सुझाव हैं। उस दृष्टिकोण के साथ समस्या ग्रिड अदृश्य बनाने के लिए अभी भी खाली टूलटिप बॉक्स दिखाएगी .. यही कारण है कि मैं टूलटिप दृश्यता को नियंत्रित करने की कोशिश कर रहा हूं।

उत्तर

12

इस प्रयास करें। यह एक खाली फ्रेम नहीं छोड़ेगा।

<TextBlock Text="test"> 
     <TextBlock.ToolTip> 
      <ToolTip Visibility="Visible"> 
       Hello 
      </ToolTip> 
     </TextBlock.ToolTip> 
    </TextBlock> 

<TextBlock Text="test"> 
     <TextBlock.ToolTip> 
      <ToolTip Visibility="Hidden"> 
       Hello 
      </ToolTip> 
     </TextBlock.ToolTip> 
    </TextBlock> 
0

आप ग्रिड पर दृश्यता सेट करना चाहिए:

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
</Window.Resources> 


... 

<Grid Visibility="{Binding IsToolTipVisible, Converter={StaticResource visibilityConverter}}> 
... 
</Grid> 
3

ये रहा;

<TextBlock Text="Dummy text"> 
     <TextBlock.ToolTip> 
      <ToolTip Visibility="Collapsed"> 
       <TextBlock Text="Text tooltip"></TextBlock> 
      </ToolTip>     
     </TextBlock.ToolTip> 
    </TextBlock> 
+0

मैं टूलटिप दृश्यता को नियंत्रित करना चाहता हूं। अगर मैं ग्रिड अदृश्य बना देता हूं, तो यह अभी भी खाली टूलटिप फ्रेम दिखाएगा। –

+1

इसे टेक्स्टब्लॉक में "" – NetSide

+0

"में टेक्स्टब्लॉक में आज़माएं, मैं टेक्स्टब्लॉक को अदृश्य नहीं बनाना चाहता हूं। बस टूलटिप –

0

यदि आप टूलटिप को खाली फ्रेम दिखाने के लिए नहीं चाहते हैं। आपको अपने सभी आवश्यक ग्रिड और टेक्स्टब्लॉक्स के साथ एक अलग टूलटिप कंट्रोल टेम्पलेट बनाना चाहिए और इसे टूलटिप टेम्पलेट में असाइन करना चाहिए। यह आपको खाली फ्रेम समस्या को हल करने में मदद कर सकता है।

+0

+1 टेम्पलेट के बिना इसे करने और रिडंडेंसी होने से बेहतर दृष्टिकोण लगता है। –

1

मुझे एहसास है कि यह एक वर्ष पुराना है, लेकिन आप इसे कोड-बैक में पूरा कर सकते हैं।

private void control_ToolTipOpening(object sender, ToolTipEventArgs e) 
{ 

    if (condition) 
     e.Handled = true; 
} 

तुम यहाँ एक गुण सेट करना चाहता था, तो आप ऐसा करते हैं, और दृश्यता को यह बाँध सकता है। अपनी खिड़की पर INotifyPropertyChanged इंटरफेस को लागू करने के लिए मत भूलना।

कुछ की तरह:

Visibility = "{Binding showControl}" 

के रूप में दृश्यता संपत्ति को

private void control_ToolTipOpening(object sender, ToolTipEventArgs e) 
{ 

    if (condition) 
    { 
     showControl=true; 
     e.Handled = true; 
    } 
} 

    public Visibility showControl 
    { 
     get 
     { 
     return _showControl; 
     } 
     set 
     { 
     _showControl = value; 
     NotifyPropertyChanged("showControl"); 
     } 
    } 

और फिर इसे बाँध मैं यह मुख्य रूप से किसी को भी है कि इस समय के बाद से यह भर आता है मदद करने के लिए टाइप कर रहा हूँ। मुझे लगता है कि आप अभी भी एक साल बाद इस पर अटक नहीं गए हैं, ओपी। =)

2

अपने टूलटिप के साथ TextBlock:

<TextBlock Text="{Binding Path=TextBoxText}"> 
    <TextBlock.ToolTip> 
     <ToolTip Visibility="{Binding Path=ToolTipText, Converter={StaticResource StringToVisibilityConverter}}"> 
      <Grid><TextBlock Text="{Binding Path=ToolTipText}" /></Grid> 
     </ToolTip> 
    </TextBlock.ToolTip> 
</TextBlock> 

TextBlock के लिए बाध्य कर रहे हैं करने के लिए वस्तु:

public class TextBoxBindingObject 
{ 
    public string TextBoxText{ get; set; } 
    public string ToolTipText{ get; set; } 
} 

कनवर्टर:

[ValueConversion(typeof(string), typeof(Visibility))] 
public class StringToVisibilityConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if(value is string) 
     { 
      var stringValue = value as string; 

      if(!String.IsNullOrEmpty(stringValue)) 
       return Visibility.Visible; 
     } 

     return Visibility.Hidden; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
1

कैसे के बारे में कस्टम शैली बनाने टूलटिप के लिए? इस तरह आप कम से कम कोड वाले कई स्थानों पर समान कार्यक्षमता का पुन: उपयोग कर सकते हैं।

एक resourcedictionary को यह जोड़ें और इसे शामिल जहां कभी आप ज्यादा सवारी डिफ़ॉल्ट टूलटिप व्यवहार करना चाहते हैं -

<Style TargetType="ToolTip" x:Key="{x:Type ToolTip}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=Content, 
              RelativeSource={RelativeSource Self}, 
              Converter={local:ToolTipContentConverter}}" 
         Value=""> 
       <Setter Property="Visibility" Value="Hidden"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

कनवर्टर इसके बाद -

[ValueConversion(typeof(object), typeof(string))] 
    public class ToolTipContentConverter : MarkupExtension, IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value ?? string.Empty; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     public override object ProvideValue(IServiceProvider serviceProvider) 
     { 
      return this; 
     } 
    } 

आशा इस मदद करता है .. अमित

0

उदाहरण: मैं लाइन के बारे में जानकारी संग्रहीत करना चाहता हूं और अपने कैनवास

में जोड़ना चाहता हूं
Line line = new Line(); 
line.X1 = 100; 
line.Y1 = 100; 
line.X2 = 500; 
line.Y2 = 100; 
line.Stroke = Brushes.Red; 
line.StrokeThickness = 1; 
line.ToolTip = new ToolTip { Content = "This is a line",Visibility= Visibility.Collapsed }; 
canvas.Children.Add(line); 
संबंधित मुद्दे