给 PaddingProperty 一个默认值没有任何改变
Giving a default value to PaddingProperty changes nothing
我有一个派生自 System.Windows.Controls.Label 的 ExtendedLabel。
我想为 PaddingProperty 提供默认值。
我知道我可以为此目的使用 OverrideMetadata 方法。
但是有些方法不起作用,Padding 值仍然显示为 5,5,5,5(这是 Label 的默认值)。
然而,对于 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 值。
Padding
值当然是由Label的默认Style设置的。
您可以通过在 Visual Studio 项目的 Themes
文件夹中创建名为 Generic.xaml
的 ResourceDictionary 来为您的 ExtendedLabel class 使用默认样式覆盖该值承载控件。
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)));
}
我有一个派生自 System.Windows.Controls.Label 的 ExtendedLabel。 我想为 PaddingProperty 提供默认值。 我知道我可以为此目的使用 OverrideMetadata 方法。 但是有些方法不起作用,Padding 值仍然显示为 5,5,5,5(这是 Label 的默认值)。
然而,对于 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 值。
Padding
值当然是由Label的默认Style设置的。
您可以通过在 Visual Studio 项目的 Themes
文件夹中创建名为 Generic.xaml
的 ResourceDictionary 来为您的 ExtendedLabel class 使用默认样式覆盖该值承载控件。
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)));
}