2

我在用户控件中设置高度和宽度时遇到问题。我创建了一个新的 WPF 应用程序,它会自动创建 MainWindow.xaml。代码如下所示:

//MainWindow.xaml
<Window x:Class="Project.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

    </Grid>
</Window>

//MainWindow.cs
namespace Project
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

我更改了代码,以便使用 UserControl 而不是 Window,如下所示:

//MainWindow.xaml
<UserControl x:Class="Project.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="350" Width="525">
    <Grid>

    </Grid>
</UserControl>

//MainWindow.cs
namespace Project
{
    public partial class MainWindow : UserControl
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

为什么不设置高度或宽度?不可能那么难。

4

2 回答 2

2

第二个示例中的代码甚至不应该编译,因为您在代码隐藏(Window)中指定了不同的基类作为 XAML(UserControl)。

假设您将代码隐藏更改为 UserControl(或什么都没有,因为它实际上只会从 XAML 中获取)大小应该从您在 XAML 中设置的内容中获取,但仅作为初始默认值。要在某处实际显示您的控件,并且将创建实例,可能在 XAML 中,但也可能来自代码。这些实例中的每一个都将使用您在此处设置的宽度和高度创建,但在任何时候都可以覆盖它们:

<local:MainWindow Width="25" Height="100"/>

那时您设置的值现在已经消失了。根据控件实例周围的情况,布局系统中还可以发生许多不同的交互。包含 Panel 或其他元素,以及 Alignment、Margin 和各种其他设置可能会影响控件的实际呈现大小。

于 2013-02-21T18:51:43.880 回答
0

(如果我犯了命名错误,请原谅,我还在学习 WPF。如果我对此有误,请纠正我。)

UserControls 需要以某种形式的容器(StackPanel、Grid、Window、...)添加。这些容器是通常设置布局的容器,其中大多数确实考虑了其子元素的设置宽度/高度。但是,如果没有包含父级,则子级无法正确设置其布局。

如果您考虑一下,如果不在窗口中,您希望如何向用户显示用户控件(与按钮处于同一级别(尽管是一个非常复杂的按钮))?

当然,能够为每个 UserControl 创建单独的文件当然很好,但最后,您总是必须将它加载到一个窗口中(如果我错了,请纠正我)。

因此,与其删除主窗口,为什么不在单独的文件中创建一个新的 UserControl 呢?

于 2013-02-21T16:05:00.657 回答