如何设置用户控件的高度和宽度

Posted

技术标签:

【中文标题】如何设置用户控件的高度和宽度【英文标题】:How to set height and width of a UserControl 【发布时间】:2013-02-07 00:54:46 【问题描述】:

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

为什么不设置高度或宽度?不会那么难的。

【问题讨论】:

【参考方案1】:

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

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

如果你想一想,如果不是在窗口中,你希望你的用户控件(与按钮处于同一级别(虽然是一个非常复杂的按钮))向用户显示?

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

那么,与其删除主窗口,不如在单独的文件中创建一个new UserControl?

【讨论】:

我想这就是我必须做的。我只是在查看这个名为 Enhance from Code52 (github.com/Code52/Enhance/blob/master/src/Enhance/Features/…) 的扫描应用程序的一些来源,他们使用 UserControls 就像人们使用 Windows 一样,但它可能在他们正在使用的 Pheonix 框架中。 可能是。抱歉,我不能给你一个明确的答案,我对 WPF 还是很陌生 :) 再说一次,操作系统被称为“Windows”,所以你需要一个来显示内容是有道理的 ;) 没问题的人。我决定使用 MVVM 并使用这个 Phoenix 框架。我真的只需要使用 UserControl 而不是 Window。【参考方案2】:

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

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

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

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

【讨论】:

以上是关于如何设置用户控件的高度和宽度的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF 如何以编程方式设置控件的位置、宽度和高度?

设置控件高度,宽度等

当我们使用不同尺寸和类型的屏幕时,如何在 iOS 中设置 UI 控件的宽度和高度约束?

my97datepicker日期控件的宽度高度如何设置呢?

C# 获取控件高度和宽度的问题

动态创建DTPicker控件