我在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部分)时它是可编辑的,我可以写入它。我的问题究竟是什么?
[编辑]我添加了屏幕截图
这是代码隐藏
public class MyCustomControl : UserControl
{
public MyCustomControl()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Content = new Grid() { Background = Brushes.Red };
}
}
答案 0 :(得分:1)
在我看来,你可以覆盖Content
属性,因为它没有以任何方式锁定。
您可以在Coerce
的{{1}}上添加委托,并使用Content
检查是否是您正在编辑控件或某些外部来源的代码。
怎么做?
首先阅读这些文章:
然后,使用这样的东西:
bool
作为另一种选择,您可以将Control.ContentProperty.OverrideMetadata(typeof(YourControlName), new PropertyMetadata(null, null, yourCallback));
创建为Control
(在Template
中定义Control.Template
)。通过这种方式,您不必依赖Control
属性(它不会影响模板)。如果你愿意,你甚至可以放入Content
,但你不需要。