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:

マルチトリガーを使ってみました。それは有望に思えますが、私はそれを正しく理解することはできません. このコードのチャンクは機能しました (ハイ コントラストに基づいて決定できるかどうかをテストするため)。

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

しかし、MultiTrigger を追加しようとすると、「Set プロパティ 'System.Windows.FrameworkElement.Style' が例外をスローしました」という例外が発生しました。内部例外は、「'Property' には null 以外の値が必要です」でした。そのためのコードは次のとおりです。

<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

私はこのコードをテストしていませんが、おそらく a を使用してオブジェクトのプロパティにMultiTriggerバインドできます。このようなもの:HighContrastSystemParameters

[削除、以下を参照]

HighContrast注:静的SystemParametersクラスのプロパティは依存関係プロパティではなく、例外を発生させないことは確かです。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 に答える