0

我有一个文本框,用户将服务器名称放入其中,并在他键入时将其验证为 FQDN。我还有一种在验证失败时应用的样式,它使文本框的背景变为粉红色。但是,我不希望在高对比度模式开启时发生这种情况,而且我似乎真的找不到太多关于如何实现这一点的文献。

这是文本框/样式:

<TextBox ...>
    <TextBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ServerName.HasErrorsToShow}" Value="true">
                    <Setter Property="TextBox.Background" Value="Pink" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

我怎样才能做到这一点?谢谢!

编辑1:

我尝试使用 MultiTrigger。这似乎很有希望,但我不能完全正确。这段代码有效(用于测试我是否可以根据高对比度做出决定):

<Style.Triggers>
    <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="True">
        <Setter Property="TextBox.Background" Value="Pink" />
    </DataTrigger>
</Style.Triggers>

但是当我尝试添加 MultiTrigger 时,我得到了“设置属性 'System.Windows.FrameworkElement.Style' 引发异常”异常。内部异常是“'Property' 必须具有非空值”。这是代码:

<Style.Triggers>
    <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Binding="{Binding ServerName.HasErrorsToShow}" Value="True" />
            <Condition Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="False" />
        </MultiTrigger.Conditions>
        <Setter Property="TextBox.Background" Value="Pink" />
    </MultiTrigger>
</Style.Triggers>
4

1 回答 1

2

我还没有测试过这段代码,但也许你可以使用 aMultiTrigger并绑定到对象的HighContrast属性SystemParameters。像这样的东西:

[已删除,见下文]

注意:我很确定HighContrast静态SystemParameters类的属性不是依赖属性,并且不会 raise NotifyPropertyChanged,所以如果用户在应用程序已经打开时更改设置,我不相信触发器会触发。

编辑:这种风格似乎适合我。

<Style x:Key="MyTextBoxStyle" TargetType="{x:Type TextBox}">
  <Setter Property="Tag" Value="{DynamicResource {x:Static SystemParameters.HighContrastKey}}"/>
  <Setter Property="Background" Value="Green"/>
  <Style.Triggers>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding ServerName.HasErrorsToShow}" Value="true"/>
            <Condition  Binding="{Binding RelativeSource={RelativeSource Self}, Path=Tag}" Value="True"/>
        </MultiDataTrigger.Conditions>
        <Setter Property="Background" Value="Red"/>
    </MultiDataTrigger>
  </Style.Triggers>
</Style>
于 2012-08-27T16:16:28.557 回答