我在XAML中定义了TextBox
控件,我希望根据其IsReadOnly或IsEnabled属性将不同的背景颜色应用于TextBox
。我使用dataTriggers实际切换颜色,如下所示:
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter Property="TextBox.Background" Value="Yellow"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsReadOnly}" Value="True">
<Setter Property="TextBox.Background" Value="Red"/>
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsReadOnly}" Value="True"/>
<Condition Binding="{Binding IsEnabled}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Green"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
TextBox的定义如下:
<TextBox Name="sourceTextBox" Margin="5,3,5,3" IsReadOnly="True" Style="{StaticResource TextBoxStyle}" />
但问题是,颜色没有正确应用。
上述方法有问题吗?
答案 0 :(得分:5)
你是不必要的复杂事情
答案 1 :(得分:3)
我认为您只需要在绑定中添加RelativeSource={RelativeSource Self}
:
<Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
<DataTrigger Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Background" Value="Red" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Self}}" Value="True"/>
<Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Green"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
但是仍然存在一个问题,我不相信你会看到红色背景,因为其IsEnabled属性设置为False的TextBox在其控件模板中具有内置的背景颜色,优先于你的样式的触发器设定器。
我认为您必须重新定义其控件模板,以便在禁用TextBox时更改背景颜色。