当WPF没有验证错误时,工具提示不显示。

5

我搜寻了一下,但没有找到解决方案。

只有在组合框提示属性中不设置提示工具提示时,才能显示验证工具提示。如果存在验证错误工具提示,则希望看到它,否则显示来自组合框属性的工具提示。当我从组合框属性面板中删除提示文本(即从组合框属性面板中删除)时,验证工具提示可以正常显示。

Application.Resources(App.XAML)中用于显示验证错误提示的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中也使用验证模板,代码如下。这段代码位于用户控件cs文件的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>

感谢您!Buck

1个回答

9

在您的样式触发器中,当出现错误时,您将工具提示设置为“验证错误”。通过操纵触发器的Value属性,您也可以在没有错误时执行相同操作。

<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>

另外建议将 Path=(Validation.Errors)[0].ErrorContent 更改为 Path=(Validation.Errors).CurrentItem.ErrorContent


很好的解决方案,但如果我想将其应用于不同的组合框,每个组合框都有不同的工具提示,该怎么办呢?即ComboBox1具有工具提示“我是一个”,而ComboBox2具有工具提示“我是#2”。我猜可能是像<Setter Property="ToolTip" Value="{Tooltip}" />这样的东西,但无法使其正常工作! - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接