2010-12-14 82 views
3

我正在试图绑定动态菜单的功能区控件。在运行时构建wpf功能区

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

顶部功能区选项卡是我的'真正'ribbontab。底部开始作为手动建立,我正在验证我的理论。

这里有我想要使用的DataTemplates:

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

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

这是我在集团的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中没有组模板,我可以使用它。 但是,如果我尝试动态地执行该组,则无法创建按钮。同样通过使用里面的ribbongroup的数据模板,标题被截断。我已经阅读过这些内容,这就是尝试使用HierarchicalDatatemplate的原因。 Regular Datatemplate不允许使用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对层次的DataTemplate的唯一的事。

回答

0

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

+0

你能告诉我一个例子吗?我只使用一个自联表创建结构... id,parentid,reportname;如果parentid = id那么它的一个组,否则它是一个孩子的任何parentid ... – ecathell 2010-12-14 19:48:10

+0

纳米...我去了另一个项目,我正在与文件夹分层数据和树视图。我不得不修改我如何使用根对象 – ecathell 2010-12-14 20:24:45

+0

实际上是一个常规的数据样式和样式工作得很好......只要确保最大化您的窗口,以便您可以正确地看到它:) – ecathell 2010-12-17 23:09:38