簡體   English   中英

以編程方式顯示不同的控件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM