2013-02-21 110 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

相關問題