我试图在控件处于特定状态时将自定义样式应用于控件,此样式可以作为样式在对象上设置。但是,在设置触发器时,无法再次设置样式属性:
<Style TargetType="{x:Type ContentPresenter}">
<Style.Triggers>
<Trigger Property="ContentTemplate" Value="{x:Null}">
<Setter Property="Style" Value="{Binding MouseOverGroupStyle, RelativeSource={RelativeSource TemplatedParent}}" />
</Trigger>
</Style.Triggers>
</Style>
不允许样式对象影响它所适用的对象的Style属性。
然而,哪个是有道理的呢?我无法绑定到setter列表,因为它只是readonly。
答案 0 :(得分:2)
这里的解决方案是使用StyleSelector,它接受ContentPresenter并检查ContentTemplate。
internal class ContentTemplateStyleSelector : StyleSelector
{
public Style NullStyle { get; set; }
public Style DefaultStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
var cp = container as ContentPresenter;
if (cp == null)
return null;
if (cp.ContentTemplate == null)
return NullStyle;
return DefaultStyle;
}
}
不幸的是,ContentPresenter没有StyleSelector属性,您可以将ContentTemplateStyleSelector的实例的StaticResource绑定到该属性,因此您可能需要从ContentPresenter转换为具有此功能的内容。
或者,可以选择使用DataTemplateSelector。
答案 1 :(得分:1)
您可以更改自己风格的Template属性。
另一种可能更好的方法是使用VisualState s。
答案 2 :(得分:0)
不允许样式对象影响它所适用的对象的Style属性......
在Windows-Presentation-Foundation.com中查看此内容以了解详情...