我想创建一个扩展内置控件的自定义控件,然后有一个用容器包装该控件的模板?
C#类:
class ExtraBorderTextBox : TextBox {}
Xaml:
<ControlTemplate>
<Border>
<TextBox/>
</Border>
</ControlTemplate>
这不起作用,因为控件模板中的TextBox
不是我的自定义控件,而是第二个实例。
我需要访问TextBox
上的属性和事件,有一个不同的父母没有意义,我将不得不复制我班上的所有内容。
这是一个简化的例子;将Border
替换为具有50行控制模板的ContentControl
。我想我想要ContentPresenter
之类的东西(就像我在ContentControl
中那样),但没有像“ControlPresenter”那样的东西。对?我是否遗漏了某些内容,或者我是否因为复制TextBox的内容控件或为我的内容控件复制TextBox
行为和演示而烦恼?
感谢。
更新: 这里有一个答案可以实现我想要的,即复制System.Windows.Controls.TextBox的默认模板。这将做我想要的;我可以将我的容器插入其中。我希望WPF提供一种更易于维护的方式来做这样的事情,比如装饰/装饰模式。
有什么方法可以在某种程度上改善这种状况吗?使用像Expression Blend这样的东西可以做到这一点,这样我就不必手工编辑从网页上粘贴的XAML了吗?
答案 0 :(得分:2)
您可以使用默认控件模板作为基础并进行修改。可以在此处找到默认控件模板:http://msdn.microsoft.com/en-us/library/aa970773.aspx
答案 1 :(得分:1)
如果我理解正确,你想继承TextBox,做一些覆盖,并在XAML中使用那个新类。
如果是这样的话:
1)在文件顶部声明xmlns名称空间:
<UserControl
...
xmlns:local="TheAssemblyWhereExtraBorderTextBoxResides"
...>
2)使用您的自定义文本框:
<ControlTemplate>
<Border>
<local:ExtraBorderTextBox />
</Border>
</ControlTemplate>