首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF自定义派生控件样式

WPF自定义派生控件样式
EN

Stack Overflow用户
提问于 2009-11-13 21:19:06
回答 5查看 14.8K关注 0票数 9

我有一个从Button派生的自定义控件:

代码语言:javascript
运行
复制
    class MyControl : Button{}

假设这个类是空的(没有成员)。

在应用程序的主窗口资源中,我使用了包含大多数WPF控件(所谓的主题)样式的ResourceDictionary:

代码语言:javascript
运行
复制
    <ResourceDictionary Source="BureauBlue.xaml" />

因此,窗口上的所有控件看起来都像是在该主题文件中定义的。但样式在MyControl控件上不受影响。我怎样才能让MyControl看起来像一个按钮控件?

更新: BureauBlue.xaml中的按钮样式没有键,定义方式如下:

代码语言:javascript
运行
复制
    <Style TargetType="{x:Type Button}" BasedOn="{x:Null}"> ...</Style>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-13 23:50:21

在静态构造函数中覆盖DefaultStyleKey的元数据:

代码语言:javascript
运行
复制
static MyControl()
{
    DefaultStyleKeyProperty.OverrideMetadata(
        typeof(MyControl),
        new FrameworkPropertyMetadata(typeof(MyControl)));
}

然后,在您的资源中,您可以将其样式基于按钮:

代码语言:javascript
运行
复制
<Style TargetType="{x:Type lcl:MyControl}" BasedOn="{StaticResource {x:Type Button}}" />

我过去曾尝试覆盖DefaultStyleKey的元数据以指向基类(在本例中为Button),但似乎不起作用。

票数 18
EN

Stack Overflow用户

发布于 2009-11-13 23:48:35

TargetType属性不适用于从指定类型派生的类。请参阅this question

票数 3
EN

Stack Overflow用户

发布于 2016-04-01 19:14:14

我使用SetResourceReference

代码语言:javascript
运行
复制
SetResourceReference(StyleProperty, typeof(Button));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1729161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档