在 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”中是“硬连线”。显然,我无法在运行时更改数字。
我现在的问题是:更改显示数字的最佳方法是什么?为每个数字创建一个样式对我来说看起来有点无效。
提前致谢, 弗兰克
答案 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。