我知道这可以在转换器中完成,但是我想基于ComboBox中选择的特定项目禁用一个按钮,仅使用XAML。
以下内容使用Visibility属性。为什么我尝试使用IsEnabled它不起作用?有什么我想念的吗?如果是这样的话,如果有人可以解释原因,那就太好了。我应该只使用转换器吗?
<ComboBox Name="WidthTypeComboBox"
ItemsSource="{Binding Source={StaticResource WidthType}}"
SelectedItem="{Binding WidthTypeSelected}" />
使用:
<Button Content="Map Channels" Command="{Binding ShowChannelAction}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedIndex,
ElementName=WidthTypeComboBox}" Value="0">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
不起作用:
<Button Content="Map Channels" Command="{Binding ShowChannelAction}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedIndex,
ElementName=WidthTypeComboBox}" Value="0">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
答案 0 :(得分:0)
我实际上不确定第一个是如何工作的。这取决于您为按钮上的属性设置的内容。通常,您需要样式中的默认setter并删除按钮本地设置的任何IsEnabled值:
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedIndex,
ElementName=WidthTypeComboBox}" Value="0">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
归结为属性值设置的优先级。例如,在本地设置的属性值覆盖样式setter / triggers。 This article通过一些示例解释了依赖属性优先级。