【问题标题】:Giving a default value to PaddingProperty changes nothing为 PaddingProperty 提供默认值不会改变
【发布时间】:2016-12-05 13:21:46
【问题描述】:

我有一个派生自 System.Windows.Controls.Label 的 ExtendedLabel。 我想为 PaddingProperty 提供默认值。 我知道我可以为此目的使用 OverrideMetadata 方法。 但在某些方面它不起作用,Padding 值仍然显示为 5,5,5,5(这是标签的默认值)。

但是,对于 Margin 等其他属性,一切正常。

    class ExtendedLabel : Label
{
    static ExtendedLabel()
    {

        PaddingProperty.OverrideMetadata(typeof(ExtendedLabel), new FrameworkPropertyMetadata(new Thickness(0)));
        MarginProperty.OverrideMetadata(typeof(ExtendedLabel), new FrameworkPropertyMetadata(new Thickness(0, 10, 0, 20)));
    }

    public ExtendedLabel()
    {
     //    this.Padding = new Thickness(0);
    }
}

PS: 我不想在构造函数中设置 Padding。 因为这避免了其他开发人员从他们的样式中更改 Padding 值。

【问题讨论】:

    标签: wpf xaml styles default dependency-properties


    【解决方案1】:

    Padding 值肯定是由标签的默认样式设置的。

    您可以通过在承载控件的 Visual Studio 项目的 Themes 文件夹中创建一个名为 Generic.xaml 的 ResourceDictionary 来使用 ExtendedLabel 类的默认样式覆盖该值。

    Generic.xaml 将包含这样的样式:

    <Style TargetType="local:ExtendedLabel" BasedOn="{StaticResource {x:Type Label}}">
        <Setter Property="Padding" Value="0"/>
    </Style>
    

    它会像这样注册为默认样式:

    static ExtendedLabel()
    {
        DefaultStyleKeyProperty.OverrideMetadata(
            typeof(ExtendedLabel),
            new FrameworkPropertyMetadata(typeof(ExtendedLabel)));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2019-01-02
      • 2014-07-28
      相关资源
      最近更新 更多