Silverlight:在运行时更改静态资源的属性

时间:2009-08-31 10:21:35

标签: silverlight

runtine 期间更改静态资源是听起来不可能的事情。

我有一个显示简单数字的TextBox。然后我定义了一个样式,它将TextBox的模板更改为圆形TextBox:

<Style x:Key="RoundNumberDisplay" TargetType="TextBox">
        <Setter Property="Width" Value="22"/>
        <Setter Property="Height" Value="22"/>

        <Setter Property="Template">
            <Setter.Value>

                    <ControlTemplate>
                        <Border x:Name="brd1" Width="20" Height="20" CornerRadius="15">
                            <TextBlock x:Name="txt1" Foreground="#222" TextAlignment="center" Text="1" FontSize="14" FontWeight="ExtraBold" VerticalAlignment="center" />
                            <Border.Background>
                                <RadialGradientBrush GradientOrigin=".3, .3">
                                    <GradientStop Color="{StaticResource ColorBackground1}" Offset=".15"/>
                                    <GradientStop Color="{StaticResource ColorForeground1}" Offset="1"/>
                                </RadialGradientBrush>
                            </Border.Background>
                        </Border>
                    </ControlTemplate>

            </Setter.Value>
        </Setter>

    </Style>

如您所见,显示的文本在TextBlock“txt1”中是“硬连线”。显然,我无法在运行时更改数字。

我现在的问题是:更改显示数字的最佳方法是什么?为每个数字创建一个样式对我来说看起来有点无效。

提前致谢, 弗兰克

2 个答案:

答案 0 :(得分:2)

TemplateBinding能够从目标TextBox设置txt1-Text-Property的值。重要说明:必须设置ControlTemplate的目标类型!

    <Style ...

                    <ControlTemplate **TargetType="TextBox"**>
                            ...

                            <TextBlock x:Name="txt1" Foreground="#222" TextAlignment="center" **Text="{TemplateBinding Text}"** FontSize="14" FontWeight="ExtraBold" VerticalAlignment="center" />
                    </ControlTemplate>
    </Style>

答案 1 :(得分:0)

Style只是控件的外观,所以在实践中你需要多次重复使用这个样式。纯粹主义者可能会说你不应该在样式中包含数字(在应用程序上下文中必须包含某些内容)等数据。因此,您可以改变使用样式时显示的数字:

<TextBox Style={StaticResource RoundNumberDisplay} x:Name="TextBoxOne" Text="1"/>

即便如此,您可能更喜欢将Text绑定到ViewModel(或者您用于数据的任何内容)并从中拉出数字。任何一个都是Ok imo。