2010-05-23 14 views
16

बस सोच रहा है कि एक अक्षम आइटम पर केवल WP12 दिखाने के लिए संभव है या नहीं (और आइटम सक्षम होने पर नहीं)।अक्षम आइटम पर केवल WP12 टूलटिप दिखाएं

मैं उपयोगकर्ता को एक टूलटिप देना चाहता हूं कि एक आइटम वर्तमान में अक्षम क्यों है।

मेरे पास बूलियन IsEnabled संपत्ति बाध्यकारी उलटा करने के लिए IValueConverter है। लेकिन यह इस स्थिति में काम नहीं कर रहा है। ToolTip आइटम सक्षम और अक्षम होने पर दोनों दिखाया गया है।

तो ToolTip.IsEnabled संपत्ति को विशेष रूप से किसी आइटम के लिए बाध्य करना संभव है! IsEnabled?

सुंदर सीधा सवाल मुझे लगता है, लेकिन कोड उदाहरण यहाँ वैसे भी:

public class BoolToOppositeBoolConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     if (targetType != typeof(bool)) 
      throw new InvalidOperationException("The target must be a boolean"); 

     return !(bool)value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     if (targetType != typeof(bool)) 
      throw new InvalidOperationException("The target must be a boolean"); 

     return !(bool)value; 
    } 

    #endregion 
} 

और बाध्यकारी:

<TabItem Header="Tab 2" Name="tabItem2" ToolTip="Not enabled in this situation." ToolTipService.ShowOnDisabled="True" ToolTipService.IsEnabled="{Binding Path=IsEnabled, ElementName=tabItem2, Converter={StaticResource oppositeConverter}}"> 
    <Label Content="Item content goes here" /> 
</TabItem> 

धन्यवाद लोग।

+0

क्या आप सुनिश्चित हैं कि ToolTipService.ShowOnDisabled = "True" आपके उलटा "बाद में" निष्पादित नहीं कर रहा है? ऐसा लगता है कि केवल सक्षम बाध्यकारी आवश्यक होना चाहिए। – JustABill

+0

@ जस्टबिल: यह मामला हो सकता है लेकिन यह ToolTipService.ShowOnDisabled = "True" के बिना काम नहीं करता है। शायद मुझे कोड-पीछे में इसे संभालने की आवश्यकता है। यदि संभव हो तो मैं XAML में जीयूआई सामान रखना पसंद करूंगा। – dant

+0

उस मामले में, मेरा सुझाव है कि आप टूलटिप जैसे टूलटिप = "{बाइंडिंग एलिमेंटनाम = टैबइटम 2, पथ = IsEnabled, कनवर्टर = {स्टेटिक रिसोर्स न्यूकॉनवर्टर}, कनवर्टर पैरामीटर = वास्तविक टूलटिप टेक्स्ट यहां जाता है}", जहां नया कनवर्टर एक नया प्रकार है जो रिटर्न देता है मान सही होने पर पैरामीटर में मान। या आपके मामले में झूठ मुझे लगता है। (इसके अलावा मैंने टाइप किया है कि मेमोरी से तो मुझे सिखाएं अगर सिंटैक्स बंद है) – JustABill

उत्तर

20

जस्टैबिल के सुझाव ने काम किया। उद्धरण चिह्नों के साथ समस्याओं से बचने के लिए मुझे संसाधन के रूप में स्ट्रिंग को परिभाषित करने की भी आवश्यकता थी। और आपको अभी भी ToolTipService.ShowOnDisabled = "True" सेट करने की आवश्यकता है।

तो, यहाँ काम कर कोड कैसे WPF में एक टूलटिप प्रदर्शित करने के लिए केवल एक आइटम अक्षम किया गया है जब पता चलता है जो है।

शीर्ष कंटेनर में, सिस्टम नेमस्पेस शामिल करें (नीचे sys देखें)। मेरे पास संसाधन नामस्थान भी है, जिसे मैंने "Res" कहा है।

<Window x:Class="MyProjectName.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    xmlns:Res="clr-namespace:MyProjectName.Resources" 
    > 

तो फिर तुम

<Window.Resources> 
    <Res:FalseToStringConverter x:Key="falseToStringConv" /> 
    <sys:String x:Key="stringToShowInTooltip">This item is disabled because...</sys:String> 
</Window.Resources> 

जरूरत है मेरे मामले में, यह एक टैब आइटम है कि मैं में दिलचस्पी थी गया था। यह किसी भी यूआई तत्व हालांकि हो सकता है ...

<TabItem Name="tabItem2" ToolTipService.ShowOnDisabled="True" ToolTip="{Binding Path=IsEnabled, ElementName=tabItem2, Converter={StaticResource falseToStringConv}, ConverterParameter={StaticResource stringToShowInTooltip}}"> 
      <Label Content="A label in the tab" /> 
</TabItem> 

और पीछे कोड में कनवर्टर (या जहां भी आप इसे रखना चाहते हैं)। नोट, मेरा नाम संसाधन नामक नामस्थान में गया, जिसे पहले घोषित किया गया था।

public class FalseToStringConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is bool && parameter is string) 
     { 
      if ((bool)value == false) 
       return parameter.ToString(); 
      else return null; 
     } 
     else 
      throw new InvalidOperationException("The value must be a boolean and parameter must be a string"); 
    } 

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

टूल टूलिप सर्विस के लिए +1 .ShowOnDisabled = "True" – Tim

5

थोड़ी देर पुरानी है, लेकिन मुझे बाध्यकारी के भीतर ElementName को सेट करने के बजाय स्वयं को सापेक्ष स्रोत मोड सेट करके स्वयं काम कर रहा है।

<TabItem Header="Tab 2" Name="tabItem2" ToolTip="Not enabled in this situation." ToolTipService.ShowOnDisabled="True" ToolTipService.IsEnabled="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource oppositeConverter}}"> 
    <Label Content="Item content goes here" /> 
</TabItem> 
+0

बहुत अच्छा जवाब – stambikk

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