WPF真的需要UserControl吗?

时间:2014-08-15 15:17:50

标签: .net wpf user-controls

我真的不知道UserControl存在的原因。 MSDN文章讲述了一个:

  

提供一种创建控件的简单方法。

它在VisualTree - UserControl 和ContentPresenter中添加了两个无用的图层。如果您在MSDN文章中应用过滤器以隐藏继承受保护的成员,您将看不到任何内容!

当您看到添加到UserControl的内容时,您通常会看到以下内容:

<UserControl ...>
    <Grid>
    ...
    </Grid>
</UserControl>

<UserControl ...>
    <DockPanel>
    ...
    </DockPanel>
</UserControl>

因此,您可以避免仅使用您在其中添加的图层使用UserControl

<Grid ...>
...
</Grid>

<DockPanel ...>
...
</DockPanel>

并从您正在使用的类继承控件作为 xaml 中的根元素。

问:所以我想知道 - 我们使用UserControl获得了哪些利润?

3 个答案:

答案 0 :(得分:1)

没什么,说实话。在我为WPF创建自定义控件的那些年里,我从未使用过UserControl。

如果您要创建自己的自定义控件,请使用ContentControl或更适合派生的任何内容。 您希望在Visual Tree中避免使用其他UI元素,因为它会影响您的应用程序性能。但是,如果你是初学者

来自MSDN

  

UserControl是一个ContentControl,这意味着它可以包含一个   任何类型的单个对象(例如字符串,图像或面板)。   有关更多信息,请参阅ContentControl类。

     

如果确实需要创建新控件,最简单的方法是创建一个派生自UserControl的类。在此之前,请考虑您的控件不支持模板,因此不支持复杂的自定义。但是,如果您希望通过向其添加现有元素来构建控件,那么从UserControl派生是一个合适的模型,类似于您构建应用程序的方式,以及您是否需要支持复杂的自定义。 (如果要在控件中使用模板,请改为从Control派生。)

答案 1 :(得分:0)

使用UserControl的主要原因是可以将一些.NET控件和一些功能轻松封装到可重用的控件中。虽然您可以在任何需要的地方重复UserControl内的XAML(如您所建议的那样),但添加UserControl而不是许多.NET控件要简单得多。

然后你必须考虑更改UserControl ...而不使用UserControl,你必须找到你使用标准.NET控件的所有地方(而不是使用UserControl)并全部更新。只更新UserControl

会更容易

此外,创建UserControl比创建CustomControl ...更快更简单,您需要创建一个CustomControlLibrary项目并定义CustomControl } generic.xaml中没有直接代码。

此外,声明UserControl对于在使用MVVM开发方法时定义视图绝对是完美的。

最后,让我们来自微软......来自MSDN上的Control Authoring Overview页面:

enter image description here

就我个人而言,我不知道在没有UserControl的情况下我会做什么,但每个开发者都会有自己的意见......这个答案只是我的。

答案 2 :(得分:-1)

其中一个好处是你可以创建一个自定义控件,你可以在不同的地方使用它。