如何在WPF中的代码隐藏中创建自定义控件

时间:2014-05-09 08:30:59

标签: c# wpf custom-controls

我在wpf中创建自定义控件时遇到问题。我总是打算在代码隐藏中完全创建自定义控件,以防我需要扩展它们。

问题是当我在xaml中添加它们时,它们是可编辑的。我不知道如何解释但是当我点击它们时,我可以写入它们。我认为这是我编写自定义控件的方式。这是一个示例代码。

public class MyCustomControl : UserControl
{
    public MyCustomControl()
    {
        var button = new Button();

        this.Content = button;    // I always assign the root element to the Content property of the UserControl. I think this is the case
    }
}

正如我所说,当我在Xaml部分添加MyCustomControl时,它工作得很好但是当我点击它(再次在xaml部分)时它是可编辑的,我可以写入它。我的问题究竟是什么?

[编辑]我添加了屏幕截图

MyCustomControl in normal state MyCustomControl when I click on and write down into it

这是代码隐藏

public class MyCustomControl : UserControl
{
    public MyCustomControl()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.Content = new Grid() { Background = Brushes.Red };
    }
}

1 个答案:

答案 0 :(得分:1)

在我看来,你可以覆盖Content属性,因为它没有以任何方式锁定。

您可以在Coerce的{​​{1}}上添加委托,并使用Content检查是否是您正在编辑控件或某些外部来源的代码。

怎么做?

首先阅读这些文章:

然后,使用这样的东西:

bool

作为另一种选择,您可以将Control.ContentProperty.OverrideMetadata(typeof(YourControlName), new PropertyMetadata(null, null, yourCallback)); 创建为Control(在Template中定义Control.Template)。通过这种方式,您不必依赖Control属性(它不会影响模板)。如果你愿意,你甚至可以放入Content,但你不需要。