2013-02-21 41 views
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(); 
     } 
    } 
} 

我更改代码,以便我使用的,而不是窗户的用户控件,像这样:

//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

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

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

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

此时,您已经设定的值,现在都没有了。根据控制实例周围的情况,布局系统内还可能发生许多不同的交互。包含面板或其他元素以及对齐,边距和各种其他设置可能会影响控件的实际渲染大小。

+0

对不起,错误的基类是一个错字。 – 2013-02-21 18:57:14

0

(请原谅,如果我做一个命名错误,我仍然在学习WPF。请你,如果我错了,这个大家指正。)

用户控件需要某种形式的容器中添加(StackPanel中,网格,窗口...)。这些容器是通常设置布局的容器,并且大多数容器都考虑到子元素的设置宽度/高度。 但是,如果没有包含父项,则该子项的布局设置不正确。

如果你考虑一下,你想怎么让你的用户控件(与按钮位于同一层(虽然是一个非常复杂的按钮))显示给用户,如果不是在窗口中?

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

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

+0

我想这就是我可能要做的。我只是想看看这个扫描应用程序的一些源码,这个应用程序叫做Code52 Enhance(https://github.com/Code52/Enhance/blob/master/src/Enhance/Features/ManageDocuments.xaml),他们使用UserControls就像人们使用Windows ,但它可能在他们正在使用的Pheonix框架中。 – 2013-02-21 16:16:41

+0

可能是。对不起,我不能给你一个明确的答案,我还是一个新的WPF以及:)然后再次,操作系统被称为'Windows',所以它的原因是你需要一个显示内容;) – Flater 2013-02-21 16:18:26

+0

没问题的人。我决定去MVVM并使用这个Phoenix Framework。我真的只需要使用UserControl而不是Window。 – 2013-02-21 16:31:05

相关问题