【发布时间】:2013-02-07 00:25:11
【问题描述】:
我有以下Style:
<Style x:Key="ButtonBase" TargetType="Button">
<Setter Property="Background" Value="#FF007BFF"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value=">
<Setter Property="Background" Value="Yellow" />
<Setter Property="Foreground" Value="Black" />
</Trigger>
<Trigger Property="IsPressed" Value="False">
<Setter Property="Background" Value="#FF007BFF" />
<Setter Property="Foreground" Value="White" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Setter.Value>
</Setter>
</Style>
还有一个继承的Style:
<Style x:Key="ElementButton" TargetType="Button" BasedOn="{StaticResource ButtonBase}">
<Setter Property="Margin" Value="10"/>
<Setter Property="Height" Value="200"/>
</Style>
我想做的是能够在基本样式中设置任意变量:
<Setter Variable="HoverColor" Value="Pink"/>
然后我就可以像这样使用我的触发器了:
<Trigger Property="IsPressed" Value=">
<Setter Property="Background" Value="{TemplateBinding HoverColor}" />
<Setter Property="Foreground" Value="Black" />
</Trigger>
最后,我可以用我继承的样式覆盖它:
<Style x:Key="ElementButton" TargetType="Button" BasedOn="{StaticResource ButtonBase}">
<Setter Property="Margin" Value="10"/>
<Setter Property="Height" Value="200"/>
<Setter Variable="HoverColor" Value="Red"/>
</Style>
有没有办法做到这一点?我已经查看了静态资源,但这些资源不能被覆盖。另外,我不能使用任何需要代码隐藏的东西,因为我没有!
【问题讨论】:
-
你说的“我没有”是什么意思 - 你的逻辑在哪里?
-
这是 MVVM 应用程序中的仅 xaml 视图。
-
好的,对于这个 MVVM 视图,您没有 ViewModel 吗?
-
我有一个 ViewModel,但 XAML 来自外部源,在运行时加载。它无法访问 ViewModel 在编译时公开的属性。