我在ResourceDictionary中创建了一个Button Style作为DataTemplate。这里有一小部分:
<Style TargetType="{x:Type Button}">
<Setter Property="Focusable" Value="False"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border">
...
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Background" TargetName="border" Value="Red" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在此模板中,a具有与属性IsSelected的绑定。这种属性在那里有一种情况,在另一种情况下没有。
是否可以在Xaml中检查绑定路径是否存在,然后在其他情况下使用它会忘记它吗? 现在我在Debug输出中有BindingExpression,我想消除它。
答案 0 :(得分:1)
更相关的问题是:为什么DataTrigger
中有ControlTemplate
?这会在控件及其数据上下文之间创建依赖关系,这就是当您的数据上下文与控件模板的期望不匹配时,您遇到此问题的原因。
您确定不能使用更合适的机制吗?例如,您是否可以使用IsSelected
应影响Background
的按钮的样式?
<Style x:Key="SpecialButtonStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
...
<Button DataContext="relevant data context" Style="{StaticResource SpecialButtonStyle}"/>
或者,更好的是,您是否可以为具有IsSelected
属性的特定数据类定义数据模板?此数据模板可以自动使用正确的Button
样式。