在运行时构建wpf功能区

时间:2010-12-14 17:53:16

标签: wpf ribbon ribbon-control

我正在尝试为动态菜单设置功能区控件。

<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>

这是我第一次尝试使用Group 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进行数据模板,标题会被截断。我已经读过这个,这就是尝试使用HierarchicalDatatemplate的原因。 Regular Datatemplate不允许使用itemsource或itemtemplate。

那么如何让动态RibbonGroup显示Dynamic 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 :(得分:0)

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