我正在为我的应用程序创建一个资源字典,在那里我将有一些“图标+文本”按钮。因为它们看起来都一样(图标和文字除外),所以我创建了一个通用样式作为其他人的基础:
<!-- Generic ActionButtonStyle -->
<Style x:Key="ActionButtonStyle" TargetType="{x:Type Button}">
<!-- some setter properties -->
<Setter Property="ContentTemplate" Value="{DynamicResource ButtonDataTemplate}"/>
</Style>
<DataTemplate x:Key="ButtonDataTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="24" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="{Binding Source}"
Stretch="Uniform"
Grid.Column="0"
Margin="2"/>
<TextBlock Text="{Binding text}"
TextWrapping="Wrap"
Grid.Column="1"
Margin="2"
VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
我有一些图标的图像:
<!-- Icons -->
<ImageSource x:Key="textToSpeech">Images/GreyIcons/TextToSpeech.png</ImageSource>
<ImageSource x:Key="play">Images/GreyIcons/Play.png</ImageSource>
<ImageSource x:Key="playSound">Images/GreyIcons/PaySound.png</ImageSource>
.
.
.
.
<ImageSource x:Key="group">Images/GreyIcons/Goup1.png</ImageSource>
我想为每个按钮创建单独的样式(对应于每个图标)。像这样:
<!-- Specific ActionButtonStyles -->
<Style x:Key="TextToSpeechButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource ActionButtonStyle}">
<Setter Property="Content">
<Setter.Value>
<Image Source="{StaticResource textToSpeech}"
</Setter.Value>
</Setter>
</Style>
我知道这不起作用..我应该怎么做?我应该为通用按钮创建自定义用户控件吗?文本将绑定到我的模型中的对象,命令(对于动作)也是如此。
答案 0 :(得分:1)
您正在寻找的示例似乎缺失,但似乎您可能正在寻找“BasedOn” - 它允许您继承,但仍然覆盖以前定义的样式。您可以像这样实现它:
<Style x:Key="MyButtonStyle" BasedOn="{StaticResource ActionButtonStyle}">
<Setter.../>
</Style>
答案 1 :(得分:1)
您需要从Button创建一个派生类,它会添加两个新的DependancyProperties。它们将被称为Text和ImageSource。您的派生类也会按照您的指示设置ContentTemplate。此ContentTemplate将绑定Text和ImageSource依赖属性。
然后,你可以像这样在XAML中创建自定义控件......
<app:CustomButton Text="Play" Source="{Binding play}"/>
...但是如果你想要一遍又一遍地使用相同的按钮,你可以创建一个应用于CustomButton的样式,并根据需要设置这两个属性。