12

でスタイルを設定し<UserControl.Resources>ます(コンバーターが赤を返すと仮定します)

<Style x:Key="FieldToValidate" TargetType="{x:Type TextBox}">
    <Setter Property="Background">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource VisualQueueOnErrorConverter}">
                <Binding RelativeSource="{RelativeSource self}" Path="Name" />
                <Binding RelativeSource="{RelativeSource AncestorType={x:Type DockPanel}}" Path="DataContext.ErrorFieldName" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" />
            </MultiBinding>
        </Setter.Value>
    </Setter>

    <Style.Triggers>
        <Trigger Property="Background" Value="Red">
            <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource self}}" />
            <Setter Property="Foreground" Value="White" />
        </Trigger>
    </Style.Triggers>
</Style>

とコントロール:

<TextBox  Name="FirstName" Text="{Binding FirstName}" Style="{StaticResource FieldToValidate}">  

期待される結果はFirstName、MultiBindingコンバーターが背景色を赤に変更すると、フィールドがフォーカスを取得し、前景色が白に変更されることですが、フィールドの背景が赤に変更されても、フォーカスも新しい前景色も取得されません。 。

XAMLパーサーは、プロパティセッターのMultiBindingコンバーターのにトリガーを処理しているように見えます。

ありとあらゆる提案を歓迎します!

4

1 に答える 1

25

Redトリガーで指定されたRedブラシとコンバーターによって返されるブラシは(インスタンスが異なるため)等しいとは見なされないため、トリガーは実行されないと思います。とにかく、何かをトリガーするために背景色に依存することはあまり良い考えではないようです...

エラーが発生したときにtrueを返すようにコンバーターを変更し、次のように使用する必要があります。

<Style x:Key="FieldToValidate" TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource VisualQueueOnErrorConverter}">
                    <Binding RelativeSource="{RelativeSource self}" Path="Name" />
                    <Binding RelativeSource="{RelativeSource AncestorType={x:Type DockPanel}}" Path="DataContext.ErrorFieldName" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" />
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource self}}" />
            <Setter Property="Background" Value="Red" />
            <Setter Property="Foreground" Value="White" />
        </DataTrigger>
    </Style.Triggers>
</Style>

また、コンバーターの名前では、おそらく「キュー」ではなく「ビジュアルキューを意味していました;)

于 2011-05-05T19:00:19.017 に答える