在运行时从代码隐藏设置样式设置器值

时间:2011-12-21 17:08:28

标签: .net silverlight windows-phone-7 styling

在silverlight中,这里讨论了一个已知的文本框插入错误:http://forums.silverlight.net/p/165276/423268.aspx

作为一种变通方法,使用附加行为,允许明确指定TextBox插入符的颜色。

因此我的TextBox样式中有以下setter:

<Style x:Key="NameEditStyle" TargetType="TextBox">
            <Setter Property="Utilities:FixCaretBrushBehavior.CaretBrush" Value="White" />

我的应用程序在Windows Phone上运行,其中TextBox可以有白色和黑色背景。我需要有条件地修改插入符号是否显示为白色到黑色。 (相当于设置属性的Value

如何从代码中有条件地更改样式设置器中的此特定属性?

我试过给一个属性x:Name并试图在代码隐藏中引用它,但属性总是null,所以我无法调整它的值。

1 个答案:

答案 0 :(得分:2)

WPF / SL / WP7中没有办法在加载后更改样式,因为Style.IsSealed将为真。 你可以做的是创建基于旧样式的新样式并将TextBoxes样式更改为新样式:

<Style x:Key="NameEditStyle" TargetType="TextBox">
    <Setter Property="Utilities:FixCaretBrushBehavior.CaretBrush" Value="White" />
    ...
</Style>

<Style x:Key="BlackNameEditStyle" TargetType="TextBox" BasedOn="{StaticResource NameEditStyle}">
    <Setter Property="Utilities:FixCaretBrushBehavior.CaretBrush" Value="Black" />
</Style>

或者,您也可以在运行时创建此新样式,如article中所述。