何时对UserControl使用模板化控件?

时间:2015-03-29 20:33:40

标签: xaml windows-runtime uwp win-universal-app uwp-xaml

我正在寻找一些关于如何在WinRT中创建自定义控件的教程,我有一个问题。

假设我想创建一个包含一些内容的简单控件,例如左边是图像的Grid,右边是几个TextBlock。

我的意思是,简单的事情:

<Grid Height="100">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.3*"/>
        <ColumnDefinition Width="0.7*"/>
    </Grid.ColumnDefinitions>
    <Image Source"/Assets/someRandomImage.png"/>
    <StackPanel Grid.Column="1"
                VerticalAlignment="Center">
        <TextBlock Text="Some text"
                   Margin="10,0,10,0"
                   FontSize="24"
                   FontWeight="SemiLight"
                   TextTrimming="CharacterEllipsis"/>
        <TextBlock Text="Some random description..."
                   Margin="10,5,10,0"
                   FontSize="18"
                   FontWeight="Light"
                   Foreground="Gray"
                   TextWrapping="Wrap"
                   TextTrimming="CharacterEllipsis"/>
    </StackPanel>
</Grid>

我会用这个内容创建一个UserControl,所以当我正在处理它的UI时,我能够在XAML Designer中看到它,并且我会在UserControl代码中添加所有的Properties和DependencyProperties。

然后我看到另一种方法是使用Template控件,所以我必须创建一个继承自Control类的类,然后使用上面的XAML代码作为模板并将其应用于自定义控件和在那里添加所有其余的逻辑。

当然,我还必须将x:Name属性添加到控件中的某些UIElements以便能够与它们进行交互,但是你明白了。

我想知道,可以使用这两种方法中的任何一种,或者更好地使用其中一种方法,为什么? 此外,我喜欢使用UserControls,因为我可以在Designer窗口中看到它们,而我无法使用模板执行此操作,我必须运行应用程序并创建控件的实例以查看它是什么实际上看起来像。

感谢您的帮助,我想我不是唯一有这种疑问的人,所以我希望这个问题能够帮助其他人:D

塞尔吉奥

2 个答案:

答案 0 :(得分:25)

<强>用户控件

  • 使用Visual Studio或Blend创建UserControl会更容易,为您提供体面的设计视图支持。
  • 您通常使用它从多个控件中构建应用中的视图。'
  • 最适合全屏或全窗口视图,或者如果您想要在较小的,可能可重复使用的代码块中拆分复杂视图。
  • 如果您选择采用MVVM模式,这种视图通常会以相应的视图模型为后盾。

  • UserControl的一个问题是,虽然您可以在应用中的多个位置重复使用它,但很难对应用中不同位置的外观或行为进行微调。它不使用模板,UI树在构造函数中加载。

  • 通常只能在单个应用程序的范围内重复使用。

自定义控制

  • custom control或在某些情况下templated control最适合用于单一用途的一小部分用户界面 - 它可视化单个特定类型的信息。
  • 模板化控件可以更改其模板以调整特定用例的视觉效果。它允许您在一个应用程序中使用一个看起来像默认按钮的按钮,在另一个应用程序中使用圆形按钮,而在另一个应用程序中只有一个图像。它使得它更具可重用性,如果您制作多个应用程序或想要与世界分享您的精彩控制权,这是有意义的。
  • 编写良好的自定义控件通常可以在多个应用中重复使用,因为它不依赖于特定应用的业务逻辑。
  • 它通常来自现有的平台控件,例如ButtonToggleButtonContentControlSliderTextBoxListView添加或覆盖其逻辑。有些情况虽然从头开始制作一个是有意义的,继承“虚拟抽象”ControlItemsControlRangeBaseShape甚至FrameworkElement(最后两个没有模板化。)
  • 加载模板时会加载模板化控件的可视化树,这可能会在控件的可见性从Collapsed更改为Visible时发生,这可以推迟加载模板的部分内容用于获得性能改进的UI。
  • 由于控件模板仅加载一次,因此非常适合在任何ItemsControl DataTemplate(列表,网格视图等)中使用。如果您使用UserControl,您的性能可能会受到影响,因为UserControl XAML会被反复解析。

自定义面板

custom panel是另一种类型的UI元素,可以自定义它的子元素。

答案 1 :(得分:3)

创建用户控件比创建自定义控件简单得多。 对于初学者,用户控件具有设计者支持。 用户控制的缺点是与自定义控件相比它受到限制。

如果您想要创建一个控件,该控件由您的示例中的某些其他控件组成,但是假设您想要创建一种特殊类型的面板,那么您真的必须创建一个自定义控件。 / p>

因此简单的用户控制简单&#39;控制 复杂控件的用户控件。 任何用户控件都可以由自定义控件创建,但不能相反。