Silverlight样式:基于自定义样式的自定义样式

时间:2014-10-27 10:26:30

标签: silverlight controltemplate

有人为应用程序的按钮做了自定义样式。现在我想基于这种自定义样式创建自定义样式。例如,我想创建一个“关闭按钮”,我想重用所有其他应用程序。我试过这个:

<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设置。我怎样才能扩展设置,保留现有设置?

感谢您的帮助

1 个答案:

答案 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>