0

我正在尝试创建一个 WPF 页面项目,其中我将屏幕一分为二。在左侧,我有四个可点击的链接/按钮。

单击其中一个链接会在屏幕右侧打开相应的页面。在那里,可以设置选项。当用户使用屏幕顶部的导航栏时,它应该只应用在右侧。

这可能吗?什么是更好的方法?

我想知道如何告诉页面(部分)要加载哪个页面。那么这会使正确的页面动态吗?

分开会更好Grid吗?或者会DockPanel是一个更好的解决方案?

Window在 WPF 中创建了一个大页面,但我想将所有这些页面拆分成一个有用的导航Page。所以我在使用 WPF 和 XAML 方面有一点经验。我应该如何解决这个问题?

4

1 回答 1

3

首先你需要确定你想要的组件,主要我看到三个组件,LeftSide 导航窗格、TopSide 导航窗格和 MainContent 窗格。首先让我们谈谈 MainContent 窗格,我认为这样做的最佳方法是使用绑定和日期模板来动态制作它。在您的 ViewModel 或 DataContext 中,您需要有一个属性来表示要在 MainContent 中显示的内容,让我们调用它MainContent,然后 MainContent 视图可以是 aContentControl并将属性Content绑定设置为 ViewModelMainContent财产。这样,您只需为要显示的每个类项设置 DataTemplate。其他方式可能是使用选项卡控件并更改 ControlTemplate,这种方式不是动态的,因为您需要预定义将显示的所有内容。

现在,对于导航窗格,您可以使用任何控件,例如,您可以使用单选按钮并更改 ControlTemplate,并在视图模型中创建逻辑,例如使用命令。

现在,使用GridorDockPanel取决于您希望应用程序做什么。如果你想要一个动态宽度,你应该使用 aGrid和 a GridSplitter,但是如果你想要固定宽度,你可以使用 a DockPaneldue 它比Grid.

希望这个答案有所帮助,不要混淆。如有疑问请反馈。


编辑

例如,在视图模型中:

public class MainViewModel:INotifyPropertyChanged
{
    public object Content {get; set;}    //Here you must to raise the PropertyChanged event
    private ICommand _showSummaryCommand
    public ICommand ShowSummaryCommand
    {
         get { return new _showSummaryCommand ?? (_showSummaryCommand = new SomeCommandImplementation((sender,e)=>{Content = new SummaryViewModel()},true))}    //most of commands implementations recive two parameters, an delegate to execute and a bool delegate for can excecute
    }
}

对于视图,在一些资源字典中:

<DataTemplate TargetType="{x:Type ViewModels:SummaryViewModel}">
    <DataGrid>
        <!--Here goes what ever you want to show for instace-->
        <TextBlock x:Name="descriptionText" Text={Binding Description}/>
    </DataGrid>
</DataTemplate>

并在您将显示所有内容的地方

<!--....-->
    <ContentControl Content={Binding Content}/>
<!--....-->

希望这段代码能帮助更多:)

于 2013-03-06T20:18:52.843 回答