我正在寻找一些关于如何在 WinRT 中创建自定义控件的教程,我有一个问题。
假设我想创建一个简单的控件,其中包含一些东西,比如左边有一个图像的网格,右边有几个 TextBlocks。
我的意思是,一些简单的事情,比如:
<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 设计器中看到它,并且我将在后面的 UserControl 代码中添加所有属性和 DependencyProperties。
然后我看到另一种方法是使用模板控件,所以我必须创建一个继承自 Control 类的类,然后使用上面的 XAML 代码作为模板并将其应用于自定义控件并添加所有其余的逻辑在那里。
当然,我还必须将 x:Name 属性添加到控件内的一些 UIElement 中,以便能够与它们进行交互,但你明白了。
我想知道,可以使用这两种方法中的一种,还是特别使用一种更好,为什么?
另外,我喜欢使用 UserControls,因为我可以在设计器窗口中看到它们,而我无法使用模板来执行此操作,我必须运行应用程序并创建控件的实例以查看它的内容其实看起来。
感谢您的帮助,我想我不是唯一一个有这个疑问的人,所以我希望这个问题也能帮助其他人:D
塞尔吉奥
最佳答案
TLDR
自定义(模板化)控件允许应用使用 Template 属性来替换控件的内部元素树。如果您不需要/不希望您的控件具有该重新模板化功能,请使用 UserControl,因为它更容易。
用户控制
UserControl
使用 Visual Studio 或 Blend 更容易创建,为您提供不错的设计 View 支持。 UserControl
的一个问题是虽然您可以在应用程序的多个位置重用它 - 很难对其在应用程序中不同位置的外观或行为方式进行细微调整,因为它不使用模板并且 UI 树已加载到构造函数中. 自定义控件
custom control
或在某些情况下 templated control
最适合用于单一目的的一小部分 UI - 它可视化单一、特定类型的信息。 Button
, ToggleButton
, ContentControl
, Slider
, TextBox
或 ListView
添加或覆盖其逻辑。但在某些情况下,从头开始创建一个子类是有意义的,子类化“虚拟抽象”Control
, ItemsControl
, RangeBase
, Shape
甚至FrameworkElement
(最后两个没有模板化)。 Collapsed
更改时发生。至Visible
这允许延迟加载 UI 的某些部分以提高性能。 自定义面板
一个
custom panel
是另一种类型的 UI 元素,它允许自定义其子元素的布局方式。
关于xaml - 何时在 UserControl 上使用模板化控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334512/