我正在构建一个我想要去设计的应用程序,它可以提醒一个dockpanel。
我想要的是,左侧(或左侧面板)的按钮代表应用程序的不同区域(例如" Milk"," Bread")然后有不同的& #34;视图"在中间小组。
我已经尝试过,使用" Frontpage"创建一个应用程序,然后按钮更改整个窗口/用户控件 - 但这不会给我静态区域/面板。
我不想使用tabtitemstrip是垂直的tabcontrol - 但它有点像我想要的功能。
有什么想法吗?
下面是一张带有希望设计的照片,有点想一想我的想法..任何帮助表示赞赏:)
http://s57.photobucket.com/user/RolleKn/media/wpfdesign_zps3737b014.jpg.html
答案 0 :(得分:13)
如果您使用WPF,请使用ContainerControl
或ContentPresenter
。
通常,“切换可见性开/关”不是一个好方法。它强制UI创建所有对象,甚至是那些不可见的对象,并处理它们的数据和事件等。
你需要手动切换它。
WPF为您提供了许多可以为您节省费用的机制。有些人比其他人聪明,有些人没有。
WPF中最基本的机制之一是Control
及其Template
属性。您可以使用单个Control
替换整个Grid + Contents + SwitchingVisibility创意并切换其Template
:
<Window.Resources>
<ControlTemplate x:Key="panel1"> ..carrots.. </ControlTemplate>
<ControlTemplate x:Key="panel2"> ..cucubers.. </ControlTemplate>
<ControlTemplate x:Key="panel3"> ..donkey.. </ControlTemplate>
...
</Window.Resources>
<Grid x:Name="LayoutRoot">
<Control x:Name="foo" />
</Grid>
现在,如果您获得foo
并设置其.Template
并将其设置为panel1
,则会显示“胡萝卜”。如果你把它设置为panel3
,驴子。等等。
它非常强大,但由于我不会涉及的其他一些事情,它不会非常方便。有书籍和教程深入解释模板。此外,此机制实际上并非设计用于此类任务。这是最基本的,如果你想在WPF中工作,这是一件好事,但这里有更合适的。
第二个强大而又基本的机制是ContentControl/ContentPresenter
。它们几乎以相同的方式工作(实际上CC在内部使用CP),所以我会跳过它。
ContentControl是一个智能控件,知道如何自动根据您要尝试呈现的数据选择正确的模板。
所以:
<Window.Resources>
<DataTemplate DataType="CarrotData"> ..carrots.. </..>
<DataTemplate DataType="CucumberData"> ..cucubers.. </..>
<DataTemplate DataType="DonkeyData"> ..donkey.. </..>
...
</Window.Resources>
<Grid x:Name="LayoutRoot">
<ContentControl x:Name="foo" Content="{Binding ..}" />
</Grid>
请注意从“ControlTemplate”到“DataTemplate”的更改 现在,使用此设置,您甚至无需手动切换模板。您只需获取“foo”并将其内容设置为:
设置要显示的数据(即foo.Content = carrots[5]
)后,ContentControl将选择要显示的相关模板。
你可以绑定 Content
属性几乎任何东西。如果你有一些包含胡萝卜/驴的数据类并且有一个属性CurrentThing
,你可以绑定它,ContentControll将自动切换视图以及对CurrentThing的更改。
这是基础知识。在我试图简要介绍的几乎任何一点上,还有更多内容。现在,请离开ControlTemplates。阅读有关DataTemplates和Bindings的信息。阅读ContentPresenter(显示1个项目的1个模板)和ItemsControl(显示N个项目+模板)。然后,阅读MVVM模式。
您很快就会发现“在一个网格中拥有所有内容”和“切换可见性”是一种奇怪的方式。
但是,如果我没有提到所有费用都包括在内,我就不公平。与手动完成所有操作相比,模板和绑定的广泛使用使您的应用程序变得更慢。但通常情况下,手动操作并不值得。
答案 1 :(得分:0)
这是迄今为止我发现的解决此问题的最佳和最简单的解决方案。
https://azerdark.wordpress.com/2010/04/23/multi-page-application-in-wpf/