2015-04-29 124 views
0

我對WPF非常陌生,這是我的第一個應用程序。WPF UserControl根據點擊哪個按鈕動態加載

我有一個不同的按鈕功能區。我想根據點擊哪個按鈕來加載UserControl。

我有一個名爲「更改密碼」的按鈕,我創建了代表UI來更改密碼的UserControl。

我有另一個名爲「解鎖帳戶」的按鈕,我有一個用戶控件可以解鎖一個帳戶。

App --> Ribbon --> RibbonButton --> SwappableUserControlAtRunTime 

我想在我的窗口中使用相同的空間來加載/卸載UserControls基於什麼點擊。

我使用WPF 4.5和.NET 4.5的Windows 8.1 我指定的PC與.NET 4.5和Windows 7+

+0

您主要使用MVVM還是代碼隱藏模式? –

+1

你在這裏嘗試我的文章http://social.technet.microsoft.com/wiki/contents/articles/30898.simple-navigation-technique-in-wpf-using-mvvm.aspx –

+0

模式背後的代碼 –

回答

2

您可以加載在ContentControl中的用戶控件。請參閱以下代碼。

<RibbonWindow x:Class="LayoutWPF_Learning.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.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Ribbon Grid.Row="0"> 
     <RibbonTab Header="Load UC"> 
      <StackPanel Orientation="Horizontal"> 
       <Button Content="UserControl1" Click="Button_Click"/> 
       <Button Content="UserControl2" Click="Button_Click_1"/> 
      </StackPanel> 
     </RibbonTab> 
    </Ribbon> 
    <ContentControl Grid.Row="1" x:Name="cntCtrl" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/> 
</Grid> 

public partial class MainWindow : RibbonWindow 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     cntCtrl.Content = new UserControl1(); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     cntCtrl.Content = new UserControl2(); 
    } 
} 
+0

這就是我最終做的。但是每個控件都是不同的「大小」。有沒有辦法「適合」它看起來不錯。 –

+0

編輯我的帖子以添加網格。現在內容將適合整個區域 –

0

即使你用代碼隱藏去(我建議你看看MVVM),你就可以使用轉換器要做到這一點,這更多的是WPF工作方式,而不是從您的C#代碼在運行時更改控件。

會有大量關於如何使用轉換器的例子;谷歌「WPF轉換器」。以下是與您的要求相關的一個:http://www.codeproject.com/Tips/285358/All-purpose-Boolean-to-Visibility-Converter

+0

是不是Code-Behind和MVVM一樣?我對WPF很陌生。那麼爲什麼一個轉換器可以幫助我? –

+0

不,MVVM(模型視圖視圖模型)是一種類似於MVC(模型視圖控制器)的設計模式。以CustomerEditor爲例,模型將是一個Customer類(名稱,地址等),您的View是一個窗口(即XAML),ViewModel是一個將它們鬆散地聯繫在一起的類。 WPF旨在與MVVM一起使用 - 舊/好文章http://goo.gl/neIkr1 轉換器允許您輕鬆控制可見性等事情。對於你來說,使用一個容器(例如一個網格)來容納兩個用戶控件,然後通過一個轉換器控制可視性 - 讓你可以輕鬆地在同一區域顯示一個或其他 – tdi