有人为应用程序的按钮做了自定义样式。现在我想基于这种自定义样式创建自定义样式。例如,我想创建一个“关闭按钮”,我想重用所有其他应用程序。我试过这个:
<Style x:Key="GlassButtonClose" TargetType="Button" BasedOn="{StaticResource GlassButton}">
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Grid.Row="0" Source="/Balisage;component/Images/Close.png" Width="24" Height="24" />
<TextBlock Grid.Column="1" VerticalAlignment="Center" Text="{Binding Source={StaticResource LocCommonStrings}, Path=ButtonLabelClose}" Margin="0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但这并不保留GlassButton设置。我怎样才能扩展设置,保留现有设置?
感谢您的帮助
答案 0 :(得分:1)
根据显示的模板和评论中的答案,您看起来只需要一个具有固定图标和文本的空间GlassButton。并且您想要使用此按钮而无需一次又一次地指定其内容。
<强>解决方案:强>
准备自己的类型GlassStyleCloseButton
。
public class GlassStyleCloseButton : Button
{
public GlassStyleCloseButton() {
DefaultStyleKey = typeof(GlassStyleCloseButton); }
}
和新类型的样式(可以放在app.xaml或generic.xaml中):
<Style TargetType="GlassStyleCloseButton" BasedOn="{StaticResource GlassButton}">
<Setter Property="Content" Value="{Binding Path=ButtonLabelClose,
Source={StaticResource LocCommonStrings}}"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image
Source="/Balisage;component/Images/Close.png"
Width="24"
Height="24"/>
<TextBlock
Grid.Column="1"
VerticalAlignment="Center"
Text="{TemplateBinding Content}"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
你可以像这样使用它:
<SomewhereInMyApp>
...
<GlassStyleCloseButton/>
</SomewhereInMyApp>