【问题标题】:Can I make WPF grid controls opaque at design time?我可以在设计时使 WPF 网格控件不透明吗?
【发布时间】:2010-10-01 23:55:24
【问题描述】:

所以我刚开始使用 WPF,我真的很恼火,如果我将两个网格放在另一个之上,顶部的网格不是不透明的。它使设计非常烦人。可以以某种方式关闭它吗?

我只是在 WPF 中构建您的标准 Winforms STYLE 应用程序。我只是想开始弥合这里的差距。在 Winforms(和 VB)中,您的表单上总是有组合框或其他东西,然后根据某些用户上下文,其中一个组合框将位于顶部。这是我自古以来设计表格的方式。这里必须满足以下两件事之一:

A) 这不是使用 WPF 设计 Windows 的推荐方法,但我不明白你应该做什么

B) 有一些属性可以使网格不透明,因此我可以按照我习惯的样式构建窗口。

我对解决 A 或 B 的答案都很好。如果我因为它们已经改变而没有以正确的方式做事,那么请赐教。

更新:事实证明,我可以通过设置背景颜色使网格变得不透明,但现在我似乎被锁定为白色背景,而不是坚持使用系统颜色。

【问题讨论】:

    标签: wpf grid


    【解决方案1】:

    您可以使用SystemColors 使控件背景颜色匹配(而不是白色)。

    我不明白您为什么要将一个网格放在另一个网格之上。在 WPF 中,您通常使用单个网格在一个区域内堆叠多个视觉元素。你能解释一下为什么要用前景元素隐藏背景中的东西吗?

    这听起来有点像您正在实现一个选项卡控件——根据焦点在控件页面之间切换。您是否尝试过新的TabControl

    我尽可能从 WinForms 转向 WPF 开发,并发现这样做需要一些重新调整。 WPF 有一种完全不同的布局方式,现在我对它更满意了,我认为它更胜一筹。我猜你只需要多走一点学习曲线。

    希望对您有所帮助。

    编辑:针对您的评论,我想您可以拥有一个没有标签的标签控件,尽管我自己没有尝试过(可能值得在 SO 上提出另一个问题)。选项卡控件是带标题的控件,这意味着它们具有标题项和内容项。在这种情况下,标题是选项卡按钮,内容是页面项。您可以指定一个ControlTemplate,详细说明这些项目应如何相互显示。

    有趣的是,许多其他类型的常见 GUI 元素也是标题控件:

    • 菜单项 - 菜单项文本/图标是标题,可选的子菜单是内容
    • 树形视图 - 每个节点都是标题,可选的子节点在内容中
    • 组框 - 标题就是标题,内容就是内容:)

    请注意,在菜单项和树视图的情况下,类型可能会递归地嵌套在其自身中。这非常优雅,并且可以在相同的逻辑模型上提供一些截然不同的呈现选项,而只需更改控件模板。

    如需了解更多信息,请阅读HeaderedContentControlHeaderedItemsControl

    【讨论】:

    • 你能创建一个没有标签的 TabControl 吗?从功能上讲,它就像一个选项卡控件,但用户看到的选项卡实际上是基于上下文的。它是您的标准 Windows 资源管理器样式应用程序,左侧是对象的树形视图,右侧是内容窗格。
    【解决方案2】:

    您可以使用以下内容:

      <Grid Background="{DynamicResource {x:Static SystemColors.WindowBrush}}">  
      <!-- content -->
      </Grid>
    

    这将实时响应系统颜色的变化(DynamicResource 会这样做)。

    【讨论】:

    • 使用 StaticResource 来减少开销,但缺点是如果有人更改系统颜色时,您的应用程序将不会更新。
    • 这是 DynamicResource 适用的情况之一,而我同意您的观点,通常首选静态。
    猜你喜欢
    • 2011-06-24
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多