0

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

从上面提到的帖子中的无样式 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 样式?
4

2 回答 2

0

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

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

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

于 2013-03-25T13:01:30.737 回答
0

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

它的特点之一是:

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

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

于 2015-12-08T18:49:08.177 回答