2017-08-06 97 views
-1

我新的WPF,我想,以顯示與多個用戶控件的窗口。WPF:更改用戶控件編程

example.xaml

<DockPanel> 

<Border x:Name ="TopRegion" DockPanel.Dock = "top"> 
    <local:userControl1/> 
</Border> 

<Border x:Name ="leftRegion" DockPanel.Dock = "left"> 
    <local:userControl2/> 
</Border> 

</DockPanel> 

的的UserControl1和usercontrol2在同一個項目的其他意見。 I.e usercontrol1.xaml和usercontrol2.xaml。

問題是我需要在運行時間期間,即編程式地將usercontrolleftRegionusercontrol2更改爲usercontrol3

如何example.xaml.cs程序實現這一目標。

+1

每當你說你WPF也不得不說MVVM了。 WPF有一些非常強大的功能,爲的DataTemplates和templateselectors這是最好的MVVM –

+0

使用在任何基於XAML的API,如WPF的,你說你要直接通過編程方法改變UI目標的那一刻,你已經失敗了。您沒有提供足夠的上下文(即良好的[MCVE],與之配套的細節一起),但是... –

+0

...你出現在場景中要試圖解決通過定義每個視圖模型類是更好的解決' UserControl「,爲每個視圖模型類聲明'DataTemplate'資源,其中模板僅包含與該視圖模型類相關聯的'UserControl',以及使用ContentControl來呈現視圖模型,讓WPF執行將視圖模型匹配到右側UserControl的工作。然後,改變顯示的UserControl是改變你在那個地方使用的視圖模型類的一個簡單的問題。 –

回答

1

您已經命名爲BorderleftRegion,所以你可以使用這個Border在代碼編程設定一個新的子像

leftRegion.Child = new userControl3(); 

後面。

這意味着您將用userControl3的新實例替換BorderuserControl2的實例。

+0

感謝您的答覆。請提供一些文檔鏈接到數據模板,用戶控件,動態更改用戶控件。 –

+0

您可以在https://wpftutorial.net/DataTemplates.html找到對數據模板的簡短介紹,以及通過https://stackoverflow.com/questions/13136816/change-data-template-dynamically或https動態更改數據模板的方法://stackoverflow.com/questions/146269/change-wpf-datatemplate-for-listbox-item-if-selected。請注意,這是解決您的問題的完全不同的方法。 – Fruchtzwerg

-2

雖然這是一個合法的請求時,它用的XAML和數據綁定邏輯交叉,所以我建議將會對最終用戶的相同的效果,但是更XAML的精神的替代方式。

解決方案很簡單 - 只需在XAML中同時有兩個控件,並根據是否需要顯示一個或另一個控件來切換其Visibility