gpt4 book ai didi

c# - WPF设计;一个窗口中的多个 View

转载 作者:行者123 更新时间:2023-11-30 13:22:27 26 4
gpt4 key购买 nike

我正在构建一个应用程序,我想在其中进行设计,这可能会让人想起停靠面板。

我想要的是在左侧(或左侧面板)有代表应用程序不同区域(例如“牛奶”、“面包”)的按钮,然后在中间面板有不同的“ View ”。

我已经尝试过的是制作一个带有“首页”的应用程序,以及更改整个窗口/用户控件的按钮 - 但是这不会给我静态区域/面板。

我不想使用带有垂直 tabtitemstrip 的 tabcontrol - 但它与我希望拥有的功能有点相同。

有什么想法吗?

下面是一张带有理想设计的图片,可以让我了解一下我的想法..感谢任何帮助:)

http://s57.photobucket.com/user/RolleKn/media/wpfdesign_zps3737b014.jpg.html

最佳答案

如果您使用 WPF,请为此使用 ContainerControlContentPresenter

一般来说,“打开/关闭可见性”不是一个好方法。它强制 UI 创建所有对象,甚至是那些不可见的对象,并处理它们的数据和事件等。

而且你需要全部手动切换。

WPF 为您提供了许多可以避免这种情况的机制。有些人比其他人聪明,有些则不然。

WPF 中最基本 的机制之一是Control 及其Template 属性。您可以将整个 Grid+Contents+SwitchingVisibility 想法替换为单个 Control 并切换其 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”并将其内容设置为:

  • 一个 CarrotData 对象,包含与胡萝卜相关的数据
  • 一个 CucumberData 对象,包含与 cucumber 相关的数据
  • 一个 DonkeyData 对象,包含与驴相关的数据

设置要显示的数据后(即 foo.Content = carrots[5]),ContentControl 将选择要显示的相关模板。

您可以绑定(bind) Content 属性到任何东西。如果您有一些包含胡萝卜/驴子的数据类,并且有一个属性 CurrentThing,您可以绑定(bind)到它,ContentControll 将随着对 CurrentThing 的更改自动切换 View 。

这是基础。还有很多,几乎在我试图简要介绍的任何一点上。现在,离开 ControlTemplates。阅读有关数据模板和绑定(bind)的信息。阅读有关 ContentPresenter(为 1 个项目显示 1 个模板)和 ItemsControl(显示 N 个项目+模板)的信息。然后,阅读一些有关 MVVM 模式的内容。

您很快就会发现“将所有内容都放在一个网格中”和“切换可见性”是一种奇怪的实现方式。

但是,如果我不提及所有内容都包含成本,那我就不公平了。与手动执行所有操作相比,大量使用模板和绑定(bind)会使您的应用程序变慢一些。但通常情况下,手动操作并不值得。

关于c# - WPF设计;一个窗口中的多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23128378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com