2013-08-19 12 views
5

मैंने खोज की और समाधान नहीं देखा।टूलटिप नहीं दिख रहा है जब कोई सत्यापन त्रुटि WPF

यदि मैं कॉम्बो बॉक्स टूलटिप संपत्ति में टूलटिप सेट नहीं करता हूं तो मुझे टूलटिप दिखाने के लिए केवल सत्यापन प्राप्त हो सकता है। जब कोई उपस्थित होता है तो मैं सत्यापन त्रुटि टूलटिप देखना चाहता हूं अन्यथा combobox प्रॉपर्टी से टूलटिप दिखाएं। जब मैं टूलटिप प्रॉपर्टी से टेक्स्ट हटाता हूं (यानी कॉम्बो बॉक्स के लिए प्रॉपर्टी पैनल से) को हटाता हूं तो सत्यापन टूलटिप ठीक दिखाई देता है।

टूलटिप सत्यापन त्रुटि को दिखाने के लिए के लिए Application.Resources में XAML (App.xaml)

<Style x:Key="StandardComboBoxStyle" TargetType="{x:Type ComboBox}"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

मैं भी इस प्रकार Combobox के लिए एक मान्यता टेम्पलेट का उपयोग है। यह उपयोगकर्ता नियंत्रण सीएस फ़ाइल के भीतर UserControl.Resources अनुभाग में है।

<ControlTemplate x:Key="comboBoxValidationTemplate"> 
    <DockPanel Name="myDockPanel"> 
     <Border BorderBrush="Red" BorderThickness="3"> 
      <AdornedElementPlaceholder Name="MyAdorner" /> 
     </Border> 
     <TextBlock Text="*" FontWeight="Bold" FontSize="18" Foreground="Red" DockPanel.Dock="Left" /> 
    </DockPanel> 
</ControlTemplate> 

नियंत्रण स्वयं को निम्नानुसार परिभाषित किया गया है। ध्यान दें कि अन्य संदर्भ यहां परिभाषित नहीं हैं (लेकिन उम्मीद है कि प्रासंगिक नहीं है - प्रश्नों के बारे में मुझे बताने में संकोच न करें)।

 <ComboBox x:Name="ExposureTime" SelectedValuePath="Content" 
     Text="{Binding ExposureTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" IsEditable="True" Validation.ErrorTemplate="{StaticResource comboBoxValidationTemplate}" 
     HorizontalContentAlignment="Right" FontSize="18" Margin="136,47,462,0" Height="27" VerticalAlignment="Top" GotFocus="ComboBox_GotFocus_1" LostFocus="ComboBox_LostFocus_1" PreviewTextInput="ExposureTime_PreviewTextInput" Opacity="{Binding BackgroundOpacity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontWeight="Thin" Style="{DynamicResource StandardComboBoxStyle}" SelectedValue="{Binding Mode=OneWay, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" IsTextSearchEnabled="False" ToolTip="My tooltip test."> 
     <ComboBoxItem Content="0.05"/> 
     <ComboBoxItem Content="0.1"/> 
     <ComboBoxItem Content="0.2" /> 
     <ComboBoxItem Content="1" /> 
     <ComboBoxItem Content="2" /> 
     <ComboBoxItem Content="5" /> 
     <ComboBoxItem Content="10" /> 
     <ComboBoxItem Content="20" /> 
     <ComboBoxItem Content="60" /> 
     <ComboBox.IsEnabled > 
      <MultiBinding Converter="{StaticResource multiBooleanConverter}"> 
       <Binding Path="NotPerformingExposure" UpdateSourceTrigger="PropertyChanged"/>Th 
       <Binding Path="NotPerformingFocusTest" UpdateSourceTrigger="PropertyChanged"/> 
      </MultiBinding> 
     </ComboBox.IsEnabled> 
    </ComboBox> 

धन्यवाद! बक

उत्तर

8

आपकी शैली ट्रिगर्स में आप त्रुटि होने पर टूलटिप को सत्यापन त्रुटि में सेट करते हैं। आप एक और नोट पर Trigger

<Style x:Key="StandardComboBoxStyle" TargetType="{x:Type ComboBox}"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
     <Trigger Property="Validation.HasError" Value="False"> 
      <Setter Property="ToolTip" Value="My tooltip test." /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

की Value संपत्ति से छेड़छाड़ मैं Path=(Validation.Errors).CurrentItem.ErrorContent

+0

महान जवाबी कार्रवाई के लिए Path=(Validation.Errors)[0].ErrorContent बदलते सलाह देते हैं द्वारा एक त्रुटि नहीं है जब आप एक ही कर सकते हैं। यह पूरी तरह से काम करता है - धन्यवाद !! – Buck

+0

ग्रेट सॉल्यूशन, लेकिन अगर मैं इसे विभिन्न कॉम्बो बॉक्स पर लागू करना चाहता हूं तो मैं क्या करूँगा, जिनमें से प्रत्येक में एक अलग टूलटिप है। अर्थात। Combobox1 में टूलटिप है "मैं एक हूं", और कॉम्बोबॉक्स 2 में टूलटिप है "मैं # 2" हूं। मैं जैसे कुछ अनुमान लगा रहा हूं लेकिन यह काम नहीं कर सकता! – Dave

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