c# – Wpf设计;一个窗口中的多个视图
我正在建立一个应用程序,我想去设计,这可能会提醒一个dockpanel.
我想要的是,左侧(或左侧面板)的按钮代表应用程序的不同区域(例如“Milk”,“Bread”),然后在中间面板中具有不同的“视图”. 我已经尝试过,正在制作一个带有“Frontpage”的应用程序,以及更改整个窗口/用户控件的按钮 – 但这不会给我静态区域/面板. 我不想使用tabtitemstrip是垂直的tabcontrol – 但它有点像我想要的功能. 有任何想法吗? 下面是一张希望设计的图片,有点想一想我的想法..任何帮助赞赏:) http://s57.photobucket.com/user/RolleKn/media/wpfdesign_zps3737b014.jpg.html 解决方法
如果您使用WPF,请使用ContainerControl或ContentPresenter.
通常,“切换可见性开/关”不是一个好方法.它强制UI创建所有对象,甚至是那些不可见的对象,并处理它们的数据和事件等. 你需要手动切换它. WPF为您提供了许多可以为您节省的机制.有些人比其他人聪明,有些则没有. WPF中最基本的机制之一是Control及其Template属性.您可以使用单个Control替换整个Grid Contents SwitchingVisibility概念并切换其模板: <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”的更改. >一个CarrotData对象,包含与胡萝卜相关的数据 一旦设置了要显示的数据(即foo.Content = carrots [5]),ContentControl将选择要显示的相关模板. 您可以将Content属性绑定到任何内容.如果您有一些包含胡萝卜/驴的数据类并且具有属性CurrentThing,则可以绑定它,ContentControll将自动切换视图以及对CurrentThing的更改. 这是基础知识.在我试图简要介绍的几乎任何一点上,还有更多内容.现在,请离开ControlTemplates.阅读有关DataTemplates和Bindings的信息.阅读ContentPresenter(显示1个项目的1个模板)和ItemsControl(显示N个项目模板).然后,阅读一些有关MVVM模式的内容. 您很快就会发现“将所有内容都放在一个网格中”和“切换可见性”是一种奇怪的方法. 但是,如果我没有提到所有内容都包含成本,我就不公平.与手动完成所有操作相比,模板和绑定的广泛使用使您的应用程序变得更慢.但通常情况下,手动操作并不值得. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |