在 WPF 中设置自定义控件的隐式样式
Setting implicit style of custom control in WPF
我的自定义控件的默认样式在 Generic.xaml 中定义并且工作正常。
但是,当我尝试以与使用内置控件相同的方式更改自定义控件的样式时,没有任何反应。在 App.xaml 中,我试图通过执行以下操作来更改控件的默认样式:
<Style TargetType="{x:Type my:CustomControl}">
<Setter Property="Background" Value="Red"/>
</Style>
如果我设置上述样式的 x:key 属性 并使用此键引用此样式,一切正常。
上述样式方法仅适用于内置控件而不适用于自定义控件是否正确,或者我只是做错了什么?是否有可行的解决方案来为自定义控件实现此类样式?
更新
在这种情况下,我的自定义控件派生自 System.Windows.Window.
是的,你是对的。 Generic.xaml
用于自定义控件,App.xaml
用于应用程序范围的资源(包括内置控件的样式)。在 App.xaml
中为自定义控件指定 TargetType
将不起作用。所以使用显式样式(x:Key
)似乎是最简单的解决方案。
我终于设法让我的自定义控件工作的隐式样式。显然,隐式样式可能不适用于派生控件,因为样式不会自动应用于控件。为了实现这一点,必须手动设置资源引用。我的自定义控件现在如下所示:
public class CustomControl : Window
{
static CustomControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl), new FrameworkPropertyMetadata(typeof(CustomControl)));
}
public CustomControl()
{
SetResourceReference(StyleProperty, typeof(CustomControl));
}
}
我的自定义控件的默认样式在 Generic.xaml 中定义并且工作正常。
但是,当我尝试以与使用内置控件相同的方式更改自定义控件的样式时,没有任何反应。在 App.xaml 中,我试图通过执行以下操作来更改控件的默认样式:
<Style TargetType="{x:Type my:CustomControl}">
<Setter Property="Background" Value="Red"/>
</Style>
如果我设置上述样式的 x:key 属性 并使用此键引用此样式,一切正常。
上述样式方法仅适用于内置控件而不适用于自定义控件是否正确,或者我只是做错了什么?是否有可行的解决方案来为自定义控件实现此类样式?
更新 在这种情况下,我的自定义控件派生自 System.Windows.Window.
是的,你是对的。 Generic.xaml
用于自定义控件,App.xaml
用于应用程序范围的资源(包括内置控件的样式)。在 App.xaml
中为自定义控件指定 TargetType
将不起作用。所以使用显式样式(x:Key
)似乎是最简单的解决方案。
我终于设法让我的自定义控件工作的隐式样式。显然,隐式样式可能不适用于派生控件,因为样式不会自动应用于控件。为了实现这一点,必须手动设置资源引用。我的自定义控件现在如下所示:
public class CustomControl : Window
{
static CustomControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl), new FrameworkPropertyMetadata(typeof(CustomControl)));
}
public CustomControl()
{
SetResourceReference(StyleProperty, typeof(CustomControl));
}
}