我想为我的应用程序创建一个模板(资源字典)。我的类型继承了按钮类型,然后我可以通过以下方式调用它:
<my-custom-type inherit from button>
</my-custom-type inherit from button>
当然还有 WPF。
更具体地说,我想使用上面的简单 XAML 语法创建下图中控件的副本。
最佳答案
有两种方法,各有优缺点:
模板 允许您重复使用 XAML 的一部分。没有(几乎总是)没有代码隐藏,您肯定不会从 Button
派生。例如,如果您想在 ItemsControl
中重复一个带边框的文本框:
<DataTemplate x:Key="MyDataTemplate">
<Border>
<TextBox/>
</Border>
</DataTemplate>
或者在按钮类中使用 ContentTemplate
:
<Button ContentTemplate={StaticResource MyTemplate}>
</Button>
您可以在使用模板的现有控件中将其用作 XTemplate="{StaticResource MyDataTemplate}"
。这是通常要走的路。请注意,属性的名称不会是 Template
,而是 ItemTemplate
或 ContentTemplate
或类似的名称。
异常(exception)情况是如果您想要自定义行为,在这种情况下您可以使用UserControl。这在技术上可以从 Button
继承,尽管您通常不会。子类化一个基本控件只有在您确定确实想要这样做时才应该这样做。创建用户控件后,语法将类似于您在问题中的语法:
<local:MyButton>
</local:MyButton>
请注意,“本地”是虚构的 xmlns。您的用户控件将包含您想要的任何控件,并且您可以通过依赖属性向使用代码公开“属性”。
关于c# - WPF 创建自己的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224714/