我正在尝试创建一个WPF页面项目,其中我将屏幕拆分为两个。在左侧,我有四个可点击的链接/按钮。
点击其中一个链接会在屏幕右侧打开相应的页面。在那里,可以设置选项。当用户使用屏幕顶部的导航栏时,它应仅应用于右侧。
这可能吗?什么是更好的方法?
我想知道如何告诉页面(部分)要加载哪个页面。那么这会使正确的页面动态吗?
分开Grid
会更好吗?或者DockPanel
会成为更好的解决方案吗?
我在WPF中创建了一个大Window
,但我想将所有这些页面拆分为有用的导航Page
。所以我在使用WPF和XAML方面有一些经验。我该如何处理这个问题?
答案 0 :(得分:3)
您需要识别所需的组件,主要是我看到三个组件,LeftSide导航窗格,TopSide导航窗格和MainContent窗格。首先让我们谈谈MainContent窗格,我认为这样做的最佳方法是使用绑定和日期模板来动态地进行此操作。在ViewModel或DataContext中,您需要有一个属性来表示要在MainContent中显示的内容,让我们调用它MainContent
,然后MainContent视图可以是ContentControl
并设置属性Content
绑定到ViewModel的MainContent
属性。这样,您只需为要显示的每个类项设置DataTemplate。其他方法可能是使用选项卡控件并使用ControlTemplate进行查找,这种方式不是动态的,因为您需要预定义您将显示的所有内容。
现在,对于导航窗格,您可以使用任何控件,例如,您可以使用单选按钮并更改ControlTemplate,并使用命令在视图模型中创建逻辑。
现在,使用Grid
或DockPanel
取决于您希望应用程序执行的操作。如果您想要动态宽度,则应使用带有Grid
的{{1}},但如果您想要固定宽度,则可以使用GridSplitter
,因为它更有效/比DockPanel
快。
希望这些答案有所帮助,不要混淆。如果有任何疑问,请反馈。
修改强>
例如,在视图模型中:
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>
希望这段代码有所帮助:)