【问题标题】:How to style RibbonComboBox如何设置 RibbonComboBox 的样式
【发布时间】:2013-03-25 12:55:24
【问题描述】:

我已经描述了binding the SelectedItem of the RibbonComboBox 的问题。尝试设置此控件的样式时会出现另一个非常难看的问题。

从上面提到的帖子中的无样式 ComboBox 开始:

<r:RibbonComboBox >
    <r:RibbonGallery SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
        <r:RibbonGalleryCategory ItemsSource="{Binding Controls}" DisplayMemberPath="Caption" />
    </r:RibbonGallery>
</r:RibbonComboBox>

我得到了预期的结果:

但在 Microsoft Blend(VS 2012 预览版)的帮助下应用样式时,Object |编辑样式 |编辑副本...(仅复制模板,使用 Blend 或 Visual Studio,效果相同):

所选项目将不再正确显示 - 而不是 DisplayMemberPath 属性,而是显示类型名称。下拉列表中的项目仍然正确。请注意,我还没有以任何方式更改样式,它是提取的默认样式/模板会产生此问题。

<r:RibbonComboBox Style="{DynamicResource RibbonComboBoxStyle1}" >

我在设置下拉项的样式时也遇到了麻烦(主要是想更改鼠标悬停背景角半径),因为 RibbonComboBox 的 ItemContainerStyle 将具有目标类型 RibbonMenuItem,并且似乎对实际的 RibbonGalleryItems 没有影响。

  1. 如何修复 RibbonComboBox 样式?
  2. 如何通过 Blend/VS 获得 RibbonGalleryItem 样式?

【问题讨论】:

    标签: wpf xaml combobox styles ribboncontrolslibrary


    【解决方案1】:

    目前,我已经通过使用 ILSpy 直接从 RibbonControlsLibrary.dll (Resources/RibbonControlsLibrary.g.resources/themes/generic.baml) 中提取默认 RibbonComboBox 样式解决了这个问题。

    这是一项繁琐的工作,因为样式引用了同一文件中的其他静态资源,因此您也需要找到并提取它们。

    这同样适用于 RibbonGalleryItem 样式,它可以像这样提取,但我更喜欢涉及 Blend 或 Visual Studio 的“更干净”的解决方案。

    【讨论】:

      【解决方案2】:

      你可能想看看JetBrains dotPeek反编译器。

      其中一个features 是:

      “...反编译 .baml 文件,使您能够重建 XAML UI 定义。”

      另外,我刚刚使用上面提到的反编译器完成了对可视化 RibbonCombobox 及其相关控件的编辑,它反编译了包括原始 Microsoft .XAML 主题在内的整个 Ribbon 库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 2010-11-09
        • 2016-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多