c# - WPF 创建自己的类型

标签 c# wpf

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

<my-custom-type inherit from button>
</my-custom-type inherit from button>

当然还有 WPF。

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

button

最佳答案

有两种方法,各有优缺点:

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

<DataTemplate x:Key="MyDataTemplate">
    <Border>
        <TextBox/>
    </Border>
</DataTemplate>

或者在按钮类中使用 ContentTemplate:

<Button ContentTemplate={StaticResource MyTemplate}>
</Button>

您可以在使用模板的现有控件中将其用作 XTemplate="{StaticResource MyDataTemplate}"。这是通常要走的路。请注意,属性的名称不会是 Template,而是 ItemTemplateContentTemplate 或类似的名称。

异常(exception)情况是如果您想要自定义行为,在这种情况下您可以使用UserControl。这在技术上可以从 Button 继承,尽管您通常不会。子类化一个基本控件只有在您确定确实想要这样做时才应该这样做。创建用户控件后,语法将类似于您在问题中的语法:

<local:MyButton>
</local:MyButton>

请注意,“本地”是虚构的 xmlns。您的用户控件将包含您想要的任何控件,并且您可以通过依赖属性向使用代码公开“属性”。

关于c# - WPF 创建自己的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224714/

相关文章:

c# - 通过 Entity Framework 抛出错误将数据插入数据库

c# - 如果不对 float 进行任何操作, float 会失去精度吗

Python 中多变量迭代的 C# 模拟?

c# - 基于单元格值的DataGrid行背景

.net - 在 Expression Blend 中反转剪切路径

c# - 如何更改 WPF 中的语言?

c# - WPF MVVM 使用 BooleanToVisibilityConverter 隐藏按钮

c# - 添加时在窗体中查找UserControl

C# - 组件引用 - Dispacher.CheckAccess()

c# - 按钮的 WPF 样式