[英]Showing different controls programmatically
在我的WPF應用中,我必須在窗口中顯示用於不同用戶操作的不同控件。 就像,當用戶選擇一個圖像時,我顯示一個Image
控件,當用戶選擇一個文本文件時,我顯示一個TextBox
控件。 同樣,有許多控件可用於不同的用戶選擇。
要做到這一點,我第一次做Visibility = Visibility.Collapsed
了使用所有控件foreach
循環,然后做Visibility = Visibility.Visible
的,我已經以顯示控制。
有更有效的方法嗎? 更改控件時,窗口會閃爍,並且並不是十分靈活,因為控件很多。
我總是為此使用ContentControl
。 它產生非常干凈的xaml代碼,而且速度超快,即使在加載相當大的視圖中,我也從未見過任何閃爍。 它確實需要WPF之外的任何其他框架。
<ContentControl Content="{Binding Selected}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type viewModels:FirstOne}">
<!-- View code for first view goes here -->
<TextBlock>Hi</TextBlock>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:SecondOne}">
<!-- View code for second view goes here -->
<Image Source="{Binding Image}" />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
然后我有一個MainViewModel
帶有屬性的導航
class MainViewModel: ViewModel, INavigation
{
public ViewModel Selected
{
get { return _selected; }
private set
{
_selected = value;
RaisePropertyChanged();
}
public void Show(ViewModel viewModel) { Selected = viewModel; }
}
}
INavigation界面就是這樣
interface INavigation { void Show(ViewModel viewModel); }
一個示例視圖模型
class FirstOne: ViewModel
{
private readonly INavigation _navigation;
public FirstOne(INavigation navigation) { _navigation = navigation; }
public void ButtonClicked()
{
_navigation.Show(new SecondOne());
}
}
首先,您可能要避免對要顯示的控件執行Visibility=Visibility.Collapsed
。 這樣可以減少一些不必要的屏幕活動。
其次,與其讓用戶以串行方式體驗所有單個可見性更改,不如將控件保留在父控件中,該控件可以在可見性更改發生之前隱藏,然后在更改完成后取消隱藏。 您甚至可以使用不透明度動畫將其淡出然后再恢復。當然,在不了解或不了解您的應用程序的前提下,我無法說出什么才是真正合適的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.