我在设置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();
}
}
}
为什么高度或宽度不会被设定?它不会那么困难。
答案 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,而不是删除主窗口?