wpf - 用户控件的用途是什么?

标签 wpf xaml user-controls

为什么我们实际上需要用户控件?

窗口:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication1="clr-namespace:WpfApplication1">

    <wpfApplication1:SaveCloseUserControl />

</Window>

用户控制:

<UserControl x:Class="WpfApplication1.SaveCloseUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Orientation="Horizontal">
    <Button Height="30" Content="Save" />
    <Button Height="30"
            Margin="1"
            Content="Cancel" />
</StackPanel>
</UserControl>

隐藏代码:

public partial class SaveCloseUserControl : UserControl
{
    public SaveCloseUserControl()
    {
        InitializeComponent();
    }
}

如果下面没有 UserControl 的代码会做完全相同的事情,我不明白为什么我应该将 StackPanel(或任何其他控件)包装在 UserControl 中。

窗口:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication1="clr-namespace:WpfApplication1">

    <wpfApplication1:SaveCloseStackPanel />

</Window>

无需用户控制的堆栈面板:

<StackPanel x:Class="WpfApplication1.SaveCloseUserControl"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Orientation="Horizontal">
    <Button Height="30" Content="Save" />
    <Button Height="30"
            Margin="1"
            Content="Cancel" />
</StackPanel>

隐藏代码:

 public partial class SaveCloseUserControl : StackPanel
 {
    public SaveCloseUserControl()
    {
        InitializeComponent();
    }
 }

我一直在到处使用 UserControls,但现在当我想到它时,除了将项目包装在其中之外,它们没有做任何事情。因此,我在 10 个不同的 View 上进行了尝试,无论它是什么,我都可以用其他项目(Grid、ComboBox、GroupBox 等)替换 UserControl,并且它们的工作方式完全相同。因此,需要明确的是,如果我有一个用户控件,并且其中的第一个元素是 ComboBox,那么我会删除 UserControl 并将 ComboBox 放在其位置上。然后里面的所有内容都保持原样,就像上面的 StackPanel 示例一样。

为什么我还要费心使用 UserControl,并且如果它不执行任何操作,还要创建和呈现另一个项目?

最佳答案

UserControl 的目的是将一组控件分组到一个可重用的组件中。它们不能被设计样式或模板化。

自定义控件的目的是扩展现有控件,或创建全新的控件。与 UserControl 不同,它们可以进行样式化和模板化。

我认为你把两者混淆了。

因此,您可能想知道,“我什么时候应该使用 UserControl 以及什么时候应该使用 自定义控件?”答案是这取决于情况。

当您需要创建一组逻辑控件,这些控件以某种方式交互以创建几乎复合控件时,您应该使用UserControl。当您想要向现有控件添加功能时,您应该使用自定义控件

在您的示例中,最好的方法是使用 UserControl,因为您的 StackPanel 是一组控件,组成一个可重用的控件组件。

您可以了解更多信息here ,和here .

关于wpf - 用户控件的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002636/

相关文章:

c# - 在文本框中发生任何更改时立即更改按钮的启用状态?

ASP.NET - 服务器控制输出缓存

用于在不同程序集中定义的类型的 WPF 工具箱安装程序

c# - 在 WPF 中的 xaml 代码中绑定(bind) const 成员

c# - ListView 人口(使用 C#)?

C#执行cmd命令不起作用

c# - 通过 XAML 实例化 View 时 SimpleInjector.Container.Verify 中出现 NullReferenceException

c# - 当前上下文中不存在名称 'InitializeComponent'(c#,xamarin)

c# - UserControl 的 BeginUpdate() EndUpdate

asp.net - 如何加载使用 VaryByControl OutputCache 的控件,并指定属性值