在运行时构建WPF Ribbon

3
我正在尝试为动态菜单绑定一个功能区控件。
<ribbon:Ribbon>
   <ribbon:RibbonTab Header="Reports"
        ItemsSource="{Binding ReportMenus}"
        ItemTemplate="{StaticResource RibbonGroupDataTemplate}">
    </ribbon:RibbonTab>
    <ribbon:RibbonTab Header="Test">
     <ribbon:RibbonGroup Header="TestGROUP"
      ItemsSource="{Binding ReportMenus}"
      ItemTemplate="{StaticResource RibbonButtonDataTemplate}">
     </ribbon:RibbonGroup>
    </ribbon:RibbonTab>
</ribbon:Ribbon>

顶部的功能区选项卡是我的“真正”的功能区选项卡。底部最初是手动构建的,我正在验证我的理论。

这里是我尝试使用的数据模板:

<Style TargetType="{x:Type ribbon:RibbonButton}">
   <Setter Property="Label"
           Value="{Binding ReportDisplayName}" />
</Style>

<DataTemplate x:Key="RibbonButtonDataTemplate">
   <ribbon:RibbonButton />
</DataTemplate>

这是我第一次尝试使用群组数据模板:

<HierarchicalDataTemplate x:Key="RibbonGroupDataTemplate" DataType="{x:Type Ribbon:RibbonGroup}"
 ItemsSource="{Binding Converter={StaticResource DebugConverter}}"
 ItemTemplate="{StaticResource RibbonButtonDataTemplate}">
   <TextBlock Text="{Binding Path=ReportDisplayName}" />
</HierarchicalDataTemplate>

接下来我尝试了这个:

<DataTemplate x:Key="RibbonGroupDataTemplate">
  <ribbon:RibbonGroup ItemsSource="{Binding Converter={StaticResource DebugConverter}}"
          ItemTemplate="{StaticResource RibbonButtonDataTemplate}" />
</DataTemplate>

问题在于我无法让按钮显示在组下面。如果没有像第二个ribbontab中那样的grouptemplate,我可以让它工作。但是,如果我也尝试动态执行该组,则无法创建按钮。此外,通过在其中包含ribbongroup的datatemplate,标题被截断。我已经了解了这一点,并且这就是尝试使用HierarchicalDatatemplate的原因。常规数据模板不允许itemsource或itemtemplate。
那么,我如何使动态RibbonGroup显示动态RibbonButtons呢?
我现在已经实施了一些其他更改,并且至少填充了它,但它并不正确。
现在它看起来像这样: alt text 我希望它看起来像这样,这部分是硬编码的。 alt text 这是xaml:
<DataTemplate x:Key="RibbonButtonDataTemplate">
   <ribbon:RibbonButton />
</DataTemplate>

<HierarchicalDataTemplate x:Key="RibbonGroupDataTemplate"
                                  DataType="{x:Type ribbon:RibbonGroup}"
                                  ItemsSource="{Binding ReportsMenuCollection}"
                                  ItemTemplate="{StaticResource RibbonButtonDataTemplate}">
   <TextBlock Text="{Binding Path=ReportDisplayName}" />
</HierarchicalDataTemplate>

我唯一剩下的尝试就是将我的RibbonButtonDataTemplate更改为分层数据模板。

1个回答

0
您需要两个分层数据模板和两个基础绑定实体,一个表示组,另一个表示项。相同的概念也适用于动态菜单结构。

你能给我展示一个例子吗?我只使用了一个自连接表来创建这些结构...id,parentid,reportname;如果parentid=id,则是一个组,否则它是任何parentid的子项... - ecathell
我去了另一个项目,那里有文件夹层次数据和树形视图。我需要修改如何处理根对象的方式。 - ecathell
实际上,一个常规的数据模板和样式就可以很好地工作...只需确保最大化窗口,以便正确查看它 :) - ecathell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接