【发布时间】:2013-10-10 21:26:25
【问题描述】:
我有一个按钮,我也应用了一种样式。应用样式后,我进行了一个测试,检查按钮的 BorderBrush 以确保正确应用了样式。此测试总是失败,因为 BorderBrush 永远不会在 Buttons 属性中更新。
有没有办法让我显示实际的 BorderBrush?我能得到的只是默认的 BorderBrush,而不是应用的样式值。
我使用的样式是这样的:
<Style x:Key="ActiveModuleBtnStyleOn" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Border Margin="0"
BorderThickness="3"
BorderBrush="Green"
Background="White"
VerticalAlignment="Stretch"
CornerRadius="4"
HorizontalAlignment="Stretch">
<Border.Effect>
<DropShadowEffect BlurRadius="10" Color="Black" Direction="325" Opacity=".5" RenderingBias="Quality" ShadowDepth="5" />
</Border.Effect>
</Border>
<TextBlock Margin="2" Text="{TemplateBinding Content}" TextWrapping="Wrap" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="IsEnabled" Value="true"/>
</Style>
然后我应用这样的样式:
if(var1 == 1)
TopologyNvTxBtn.Style = this.FindResource("ActiveModuleBtnStyleOn") as Style;
else
TopologyNvTxBtn.Style = this.FindResource("ActiveModuleBtnStyleOff") as Style;
在我的测试应用程序中,我想检查应用了哪种样式。两种样式的区别在于边框画笔。我想做这样的事情:
if(TopologyNvTxBtn.BorderBrush == Brushes.Green)
return PASS;
但是 BorderBrush 永远不会改变(例如,在监视窗口中,它与默认按钮样式 BorderBrush 保持相同),但它肯定会正确应用,因为它在 GUI 中变为绿色。
如何在我的测试中访问此属性?
在此先感谢
【问题讨论】:
-
安迪,
Border设置在按钮的ControlTemplate内。查看此MSDN article 了解更多信息! -
这是否意味着我无法在运行时访问它?
-
您必须设置自己的
Template- 请参阅下文。 -
不要忘记为您的元素添加
x:Name! -
检查元素及其各自风格的好工具是Snoop。如果您打算在 WPF 中开发并设置自己的元素和控件样式,则必须具备此功能。