2010-12-14 85 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