我创建了一个自定义WPF按钮,它有3种状态(正常,单击,禁用)。对于每个州,我都有不同的形象。我在项目的不同位置使用此常规按钮,每次使用.CS文件中的属性加载不同的图像。
<Button.Resources>
<ImageSource x:Key="Normal">..\Resources\DefaultNormal.png</ImageSource>
<ImageSource x:Key="Disabled">..\Resources\DefaultDisabled.png</ImageSource>
<ImageSource x:Key="Pressed">..\Resources\DefaultPressed.png</ImageSource>
</Button.Resources>
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image Name="normal" Source="{DynamicResource Normal}" Stretch="Fill"/>
<Image Name="pressed" Source="{DynamicResource Pressed}" Stretch="Fill" Visibility="Hidden"/>
<Image Name="disabled" Source="{DynamicResource Disabled}" Stretch="Fill" Visibility="Hidden"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="pressed" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="disabled" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
现在我想对按钮的文本/内容做同样的事情,但我找不到类似ImageSource
的文字。有没有类似的东西?还是有不同的方式来动态更改文本?
答案 0 :(得分:2)
看起来您只需要在控件模板中添加一个新元素;然后你可以在触发器中访问它。
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image Name="normal" Source="{DynamicResource Normal}" Stretch="Fill"/>
<Image Name="pressed" Source="{DynamicResource Pressed}" Stretch="Fill" Visibility="Hidden"/>
<Image Name="disabled" Source="{DynamicResource Disabled}" Stretch="Fill" Visibility="Hidden"/>
<TextBlock Name="text" Text="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="pressed" Property="Visibility" Value="Visible"/>
<Setter TargetName="text" Property="Text" Value="Pressed :)"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="disabled" Property="Visibility" Value="Visible"/>
<Setter TargetName="text" Property="Text" Value="Disabled :("/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
在这里,我在图像上添加了TextBlock
,并更改了按下/禁用状态下的文字。
如果要在控件中添加文本字符串作为资源,请使用System
命名空间引用String
类型。 xmlns:clr="clr-namespace:System;assembly=mscorlib
<Button.Resources>
<clr:String x:Key="NormalText">Normal</clr:String>
<clr:String x:Key="DisabledText">Disabled</clr:String>
<clr:String x:Key="PressedText">Pressed</clr:String>
</Button.Resources>
答案 1 :(得分:0)
试试这个:
1)添加到命名空间:
xmlns:system="clr-namespace:System;assembly=mscorlib"
2)将此条目添加到资源:
<system:String x:Key="myMessage">Button state: clicked!</system:String>
现在您可以在TextBlock
文字属性“myMessage”或Button
内容中使用:
<Button Content="{StaticResource myMessage}" />