如何设置UserControl的高度和宽度

时间:2013-02-21 15:58:14

标签: wpf xaml height width

我在设置UserControl中的高度和宽度时遇到问题。我创建了一个新的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();
        }
    }
}

为什么高度或宽度不会被设定?它不会那么困难。

2 个答案:

答案 0 :(得分:1)

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

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

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

此时您设置的值现已消失。在布局系统中还可以发生许多不同的交互,具体取决于控件实例周围的内容。包含面板或其他元素,以及对齐,边距和各种其他设置可能会影响控件的实际渲染大小。

答案 1 :(得分:0)

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

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

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

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

因此,为什么不在一个单独的文件中创建 new UserControl,而不是删除主窗口?