在XAML中,您可以创建自己的可重用控件类型作为UserControl对象,如下所示:
<UserControl x:Class="MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Button Content="Test"/>
</Grid>
</UserControl>
但您也可以将该视图中的基本类型更改为与内容容器相同的类型,如下所示:
<Grid x:Class="MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button Content="Test"/>
</Grid>
这两个选项有什么区别?在我的例子中,它们都来自FrameworkElement
并且从那里分离继承。但似乎它们的功能相同。
我确信这是一个很好的理由,但是我很难找到一个好的方案来证明这种区别。谁能开导我?
答案 0 :(得分:0)
老实说,具有不同基类型的主要原因是属性。
如果您发现UserControl没有您需要的依赖项属性 - 也许您希望它不时地扩展某些内容,那么您可以将其基于Expander而不是进入代码隐藏输入'propdp'并重新发明轮子,替换模板而不是只是将东西塞进“content”属性并绑定到Expander的“IsExpanded”属性。
这样做可以让你通过复制现有控件的模板并添加它来模糊UserControl和Custom Control之间的界限;如果需要,可以利用现有属性并在代码中添加新属性。
UserControl标签本身只是一个平均基数,但是如果你觉得其他东西更符合你想要的控件,那么就使用它。
或者,如果你想要的只是一个美化的容器来提升一堆文本框或者经常使用的东西,那么你就不需要改变一件事。