如何根据默认样式创建样式?

时间:2012-10-22 17:52:18

标签: .net wpf xaml silverlight

如何在Silverlight中基于默认样式创建样式?

例如,在WPF中,我们将其设为:

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
  <Setter Property="Margin" Value="2" />
  <Setter Property="Padding" Value="2" />
</Style>

4 个答案:

答案 0 :(得分:26)

几乎一样。只需使用更明确的命名减去x:Type

<Style TargetType="TextBox" BasedOn="{StaticResource DefaultTextBoxStyle}">

更多信息here in the docs。 PS,如果您需要默认模板,例如TextBox通常可以在CoreStyles.xaml中找到

如果您在第一次阅读答案时感到困惑,请按照评论中的要求添加

你需要一个基本风格,这很容易做到,因为你打算在像Silverlight默认提供的应用程序主题中这样做(wpf / uwp等不会有这些文件创建了像ToolkitStyles.xaml,SDKStyles.xaml,CoreStyles.xaml等文件......答案中的静态资源名称是从最初回答的那一年开始定位Silverlight版本的。“ p>

答案 1 :(得分:19)

要基于默认样式创建样式,您需要创建命名样式,然后根据命名样式(http://weblogs.asp.net/lduveau/silverlight-how-to-inherit-from-an-implicit-style

创建默认样式
<Style x:Key="DefaultCustomControlStyle" TargetType="local:CustomControl">
    <Setter Property="Padding" Value="2" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:CustomControl">
                <ContentPresenter />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="local:CustomControl" BasedOn="{StaticResource DefaultCustomControlStyle}" />

答案 2 :(得分:2)

我建议您看一下: https://justinmchase.com/2009/05/29/derived-styles-based-on-unnamed-default-styles/ 对于您来说,它会像这样:

<configuration>
    <core>
        <addresses>
            <address name="DLQ">
                <anycast>
                    <queue name="DLQ"/>
                </anycast>
            </address>
            <address name="ExpiryQueue">
                <anycast>
                    <queue name="ExpiryQueue"/>
                </anycast>
            </address>
            <address name="remove-it">
                <anycast>
                    <queue name="remove-it"/>
                </anycast>
            </address>
        </addresses>
    </core>
</configuration>

答案 3 :(得分:0)

如果我理解正确,那么您正在寻找OverridesDefaultStyle

<Style TargetType="{x:Type TextBox}">
      <Setter Property="OverridesDefaultStyle" Value="False" />
      <Setter Property="Margin" Value="2" />
      <Setter Property="Padding" Value="2" />
</Style>