Bla*_*rog 12 .net xaml triggers multibinding
设置样式<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>
Run Code Online (Sandbox Code Playgroud)
和控制:
<TextBox Name="FirstName" Text="{Binding FirstName}" Style="{StaticResource FieldToValidate}">
Run Code Online (Sandbox Code Playgroud)
FirstName
当MultiBinding转换器将背景颜色更改为红色时,预期结果是场获得焦点并且前景色变为白色,但是当场的背景变为红色时,它不会获得焦点,也不会获得新的前景色.
几乎看起来XAML解析器在属性设置器的MultiBinding转换器之前处理Trigger .
欢迎任何和所有建议!
Tho*_*que 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>
Run Code Online (Sandbox Code Playgroud)
此外,在您的转换器的名称,您可能意味着"视觉提示 ",而不是" 队列" ;)