C# WPF创建您自己的类型

C# WPF创建您自己的类型,c#,wpf,C#,Wpf,我想为我的应用创建一个模板资源字典。我的类型继承了按钮类型,然后我可以通过以下方式调用它: <my-custom-type inherit from button> </my-custom-type inherit from button> 当然还有WPF 更具体地说,我想用上面简单的XAML语法在下图中创建控件的副本 有两种方法,每种方法都有各自的优缺点: 模板允许您重用XAML的一部分。几乎总是没有代码隐藏,而且您肯定不会从Button派生。例如,如果希望在Item

我想为我的应用创建一个模板资源字典。我的类型继承了按钮类型,然后我可以通过以下方式调用它:

<my-custom-type inherit from button>
</my-custom-type inherit from button>
当然还有WPF

更具体地说,我想用上面简单的XAML语法在下图中创建控件的副本


有两种方法,每种方法都有各自的优缺点:

模板允许您重用XAML的一部分。几乎总是没有代码隐藏,而且您肯定不会从Button派生。例如,如果希望在ItemsControl中重复有边框的文本框:

您可以在使用模板的现有控件中将其用作XTemplate={StaticResource MyDataTemplate}。这通常是一种方式。请注意,属性的名称不是Template,而是ItemTemplate、ContentTemplate或类似的名称

例外情况是,如果需要自定义行为,则使用UserControl。从技术上讲,这可以从Button继承,但通常不会。子类化一个基本控件应该只在你确定你真的想这样做的情况下进行。创建用户控件后,语法将与问题中的语法类似:

<local:MyButton>
</local:MyButton>

注意,local是由xmlns组成的。您的用户控件将由您想要的任何控件组成,并且您可以通过依赖项属性向使用代码公开属性

有两种方法,每种方法都有各自的优缺点:

模板允许您重用XAML的一部分。几乎总是没有代码隐藏,而且您肯定不会从Button派生。例如,如果希望在ItemsControl中重复有边框的文本框:

您可以在使用模板的现有控件中将其用作XTemplate={StaticResource MyDataTemplate}。这通常是一种方式。请注意,属性的名称不是Template,而是ItemTemplate、ContentTemplate或类似的名称

例外情况是,如果需要自定义行为,则使用UserControl。从技术上讲,这可以从Button继承,但通常不会。子类化一个基本控件应该只在你确定你真的想这样做的情况下进行。创建用户控件后,语法将与问题中的语法类似:

<local:MyButton>
</local:MyButton>

注意,local是由xmlns组成的。您的用户控件将由您想要的任何控件组成,并且您可以通过依赖项属性向使用代码公开属性

请更清楚一点,您当然可以创建用户控件,甚至可以从按钮继承,尽管我怀疑您是否真的想这样做。你能澄清一下你在哪里挣扎吗?好吧,我想你知道你可以为wpf中的每种小部件类型创建这些模板。在我的应用程序中,我创建了一个带有文本框的边框。但现在我想用这些小部件创建类型。所以我可以导入它并经常使用它。我希望这是一个很好的解释。。。好吧,我会上传一张照片。我想我有点明白了。如果我的答案有帮助,请告诉我!另外,请在你的帖子中编辑该评论的信息,这确实有助于澄清它。如果你发布一个链接到图片,我会为你上传。这是我的图片,答案仍然是一样的,但我为您添加了它:请更清楚一点,您当然可以创建用户控件,甚至可以从按钮继承,尽管我怀疑您是否真的想这样做。你能澄清一下你在哪里挣扎吗?好吧,我想你知道你可以为wpf中的每种小部件类型创建这些模板。在我的应用程序中,我创建了一个带有文本框的边框。但现在我想用这些小部件创建类型。所以我可以导入它并经常使用它。我希望这是一个很好的解释。。。好吧,我会上传一张照片。我想我有点明白了。如果我的答案有帮助,请告诉我!另外,请在你的帖子中编辑该评论的信息,这确实有助于澄清它。如果你发布一个链接到图片,我会为你上传。这是我的照片,答案仍然是一样的,但我给你加上了:啊。。。我想我已经理解了第一个例子。我将测试它:P brbTemplates看起来是正确的。@kidshaw通常是的,UserControl在WPF中经常被误用。异常:System.Windows.DataTemplate类型的对象不能应用于预期System.Windows.Controls.ControlTemplate类型的属性。我试过了,但它给了我一个错误:@Sens4不是我真正的意思。。。该属性需要一个可以创建的ControlTemplate,尽管没有理由这样做。我将添加一个有帮助的示例。你只需要使用ContentTemplateah。。。我想我已经理解了第一个例子。我将测试它:P brbTemplates看起来是正确的。@kidshaw通常是的,UserControl在WPF中经常被误用。异常:System.Windows.DataTemplate类型的对象不能应用于预期System.Windows.Controls.ControlTemplate类型的属性。我试过了,但失败了
告诉我这个错误:@Sens4不是我真正的意思。。。该属性需要一个可以创建的ControlTemplate,尽管没有理由这样做。我将添加一个有帮助的示例。您只需要使用ContentTemplate
<local:MyButton>
</local:MyButton>