自定义控件的 WPF 设置内容



在我的 WPF 应用程序中,我在多个页面上有多个标签,这些标签看起来都相同,但在程序运行期间可能会更改样式(一次全部(。

在网上进行了大量搜索后,我已经浏览了 Window.Resources 模板和用户控件(当程序运行期间可以更改时,它们都不适合样式(,并且目前已确定使用 CustomControl。但是,我不知道如何设置其内容。有些标签会有一个带有多个孙子的包装面板,有些标签只会有文本。但是,无论哪种方式,我都无法解决。这似乎是一个超越标签的程序。我错过了什么?

我的控件(刚刚更改为从标签继承(:

public class MyControl : Label
{
static MyControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl)));
}
}

主题.通用.xaml 没有变化

我的窗口 XAML(此处的样式用于测试目的(:

<local:MyControl Height="100">
<TextBlock Text="hi there" FontSize="60"></TextBlock>
<!-- More children will be needed, but lets start with one for now -->
</local:MyControl>
<local:MyControl Height="100" Content="this should exist" FontSize="50" />

如何显示该内容?

编辑:删除 DefaultStyleKeyProperty.OverrideMetadata 有效。

如果要在Themes/Generic.xaml中重写自定义控件的DefaultStyleKeyProperty,则应为自定义控件定义默认模板。基于默认模板Label

<Style TargetType="{x:Type local:MyControl}" BasedOn="{StaticResource {x:Type Label}}"/>

或者,您可以删除DefaultStyleKeyProperty的重写,并保留控件,如下所示:

public class MyControl : Label
{
// No overriding
}

最新更新