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


75

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

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

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

27
我来到这个问题,是在WPF中寻找解决方法的答案:)
Lynn

Answers:


31

基本上一样。x:Type用更明确的命名来减去即可。

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

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

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

确实需要一个基本样式,这真的很容易做到,因为您打算在默认情况下在Silverlight提供的应用程序主题中创建基本样式(wpf / uwp等不会包含这些样式)来创建类似ToolkitStyles.xaml的文件,SDKStyles.xaml,CoreStyles.xaml等...答案中的staticresource名称来自最初针对该答案的年份的Silverlight版本。”


2
但是如果我想继承自定义控件的默认样式(由我开发)?
ZuTa 2012年

2
不,我的自定义控件具有默认样式。我想基于它的新样式。
ZuTa 2012年

25
我不明白为什么这被接受为答案。显然,它基于命名样式,而不基于默认(和未命名)样式。
内斯特

4
@ChrisW。不,我只是指出DefaultTextBoxStyle是给定样式的名称,没有使用基于控件的未命名样式作为基础的解决方案
Nestor

2
这个答案是错误的。假设已经存在一种命名样式来作为新样式的基础。
disklosr '16

22

仅针对Silverlight

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

<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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.