如何基于默认样式创建样式?

89

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

例如,在WPF中,我们可以这样做:

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

37
我来到这个问题是为了寻找在WPF中如何实现它的答案 :) - Lynn Crumbling
对于WPF,L Chougrani(https://dev59.com/pGcs5IYBdhLWcg3wPxge#64808699)的答案是有效的。 - Soko
对于WPF来说,L Chougrani的回答(https://stackoverflow.com/a/64808699/1443733)是有效的。 - undefined
4个回答

45

1
这应该是被接受的答案,因为它基于TextBox的默认样式,而不是独立的键。 - Nathan Evans

43

基本一样,只是用更明确的命名方式去掉了x:Type

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

获取更多信息,请阅读此处的文档。另外,如果你需要默认模板,例如TextBox通常可以在CoreStyles.xaml中找到。

根据评论请求的补充说明:

你确实需要一个基础样式,这非常容易实现,因为你应该像Silverlight默认提供的应用程序主题一样(WPF/UWP等不会有这些),创建类似ToolkitStyles.xaml、SDKStyles.xaml、CoreStyles.xaml等文件。这也是答案中静态资源名称的来源,因为当时回答的版本是针对Silverlight的。”


2
但是如果我想继承自定义控件(由我开发)的默认样式呢? - ZuTa
2
不,我有一个自定义控件的默认样式。我想基于它创建新的样式。 - ZuTa
46
我不理解为什么这个答案被接受了。很明显,它是基于一种具名样式而不是默认的(没有命名的)样式。 - Nestor
4
@ChrisW,我只是指出_DefaultTextBoxStyle_是一个给定样式的名称,没有解决方案可以使用未命名的、基于控件的样式作为基础。 - Nestor
4
这个回答是错误的。它假设已经有一个命名样式可以作为新样式的基础。 - disklosr
显示剩余10条评论

24

仅适用于Silverlight:

为了创建一个基于默认样式的样式,您需要创建一个命名样式,然后使默认样式基于该命名样式 (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}" />

如果你正在使用WPF,那么最好使用原始问题中的代码,这样会简单得多。


-3

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接