2012-12-30 121 views
1

我只是在自學WPF的過程中。我已經達到了動態添加控件的地步,並且在一些非常簡單的事情上遇到了困難。我的代碼,應該創建一個按鈕(如下圖所示):哪裏可以放WPF動態控件創建代碼

Button button = new Button() { Height = 80, Width = 150, Content = "Test" }; 
parentControl.Add(button); 

我的問題是什麼是parentControl其實叫什麼名字?我正在使用標準的Visual Studio 2012 WPF模板,我的主窗口名爲MainWindow。我在除了隨之而來的模板窗口沒有對象

到目前爲止,我已經看了看:

我發現它最接近的:WPF runtime control creation

所有這些問題只是假設你知道這樣一個基本的東西,但我不知道。請幫忙。

+0

我不知道你用你的代碼是什麼背景下(更長的例子可能有所幫助),但如果你需要知道'parentControl'的類型,你可以使用'parentControl.GetType()'。 – Mir

回答

4

我想我明白你的問題。如果您的XAML代碼如下所示:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
</Window> 

那麼你的代碼隱藏應該是這樣的:

public MainWindow() 
{ 
    InitializeComponent(); 
    Button button = new Button() { Height = 80, Width = 150, Content = "Test" }; 
    //In case you want to add other controls; 
    //You should still really use XAML for this. 
    var grid = new Grid(); 
    grid.Children.Add(button); 
    Content = grid; 
} 

不過,我熱烈建議你使用XAML儘可能多的,你可以。此外,我不會從構造函數中添加控件,但我會使用窗口的Loaded事件。您可以從構造函數的代碼隱藏中將事件處理程序添加到事件中,或者直接在XAML中添加。如果你想有同樣的結果如上XAML,你的代碼將是:

<Window 
    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> 
     <Button Height="80" Width="180" Content="Test"/> 
    </Grid> 
</Window> 
+0

真棒,謝謝Eve :-)你能解釋一下爲什麼你會盡可能多地使用XAML?再次感謝。 – Brett

+0

@佈雷參考:http://stackoverflow.com/questions/6421372/why-to-avoid-the-codebehind-in-wpf-mvvm-pattern – Mir

+0

@Brett使用'DataTemplates'來即時生成控件。 – ywm