UserControl的目的是什么?

adm*_*tDK 12 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>
Run Code Online (Sandbox Code Playgroud)

用户控制:

<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>
Run Code Online (Sandbox Code Playgroud)

代码背后:

public partial class SaveCloseUserControl : UserControl
{
    public SaveCloseUserControl()
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有看到任何理由为什么我应该在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>
Run Code Online (Sandbox Code Playgroud)

没有用户控制的堆栈面板:

<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>
Run Code Online (Sandbox Code Playgroud)

代码背后:

 public partial class SaveCloseUserControl : StackPanel
 {
    public SaveCloseUserControl()
    {
        InitializeComponent();
    }
 }
Run Code Online (Sandbox Code Playgroud)

我一直在使用UserControls,但是现在当我想到它时,除了包装一个项目之外,它们什么都不做.所以我尝试了10个不同的视图,无论它是什么,我能够将UserControl替换为其他项目(Grid,ComboBox,GroupBox等),并且它们的工作方式完全相同.所以要清楚,如果我有一个用户控件,其中第一件事是ComboBox,那么我删除了UserControl并将ComboBox放在其位置.内部的所有内容都保持不变,就像上面的StackPanel示例一样.

为什么我甚至不打扰UserControl,如果它没有做任何事情,还有另一个项目要创建和渲染?

Mik*_*son 14

的目的UserControl是要一组控制成一个,可重复使用的部件.它们不能被设计或模板化.

a的目的Custom Control扩展现有控件,或创建全新控件.这些,而不是一个UserControl 可以设计和模板化.

我觉得你和这两个人搞混了.

所以,你可能想知道,"我UserControl什么时候应该使用a,Custom Control什么时候应该使用?" 这个问题的答案取决于它.

UserControl当您需要创建一个逻辑控件组时,您应该使用a ,这些控件以某种方式交互以创建几乎复合控件.如果Custom Control要向现有控件添加功能,则应使用a .

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

你可以更打听了一下这里,并在这里.