2011-04-19 26 views
0

我正在使用RibbonSplitButton在其下拉菜單項中模仿Visual Studio的撤消重做按鈕。 我們有撤消重做堆棧,我有一個依賴性屬性更改事件處理程序,將更新基於堆棧的用戶界面。問題是,splitbutton的items屬性正在使用一個Collection,即使它的項目集合是按正確的順序排列的,它們也不會顯示它們,因爲它們是按索引排序的。WPF RibbonControlsLibrary RibbonSplitButton項目問題

我將在下面提供一些例子來解釋這更好:

代碼:

private static void UndoRedoUpdated(DependencyObject obj, DependencyPropertyChangedEventArgs args) 
    { 
     VO3Main main = (VO3Main)Application.Current.MainWindow; 
     MenuItem item; 
     int dif; 

     if (main.UndoCommands != null) 
     { 
      dif = main.UndoCommands.Count - main._undoMenu.Items.Count; 
      if (dif > 0) 
      { 
       for (int i = dif - 1; i >= 0; i--) 
       { 
        item = new MenuItem(); 
        item.Header = main.UndoCommands[i].Name; 
        item.Click += new RoutedEventHandler(main.undoMenu_Click); 
        main._undoMenu.Items.Insert(0, item); 
       } 
      } 
      else if (dif < 0) 
      { 
       for (int i = 0; i < -dif; i++) 
        main._undoMenu.Items.RemoveAt(0); 
      } 
     } 

     if (main.RedoCommands != null) 
     { 
      dif = main.RedoCommands.Count - main._redoMenu.Items.Count; 

      if (dif > 0) 
      { 
       for (int i = dif - 1; i >= 0; i--) 
       { 
        item = new MenuItem(); 
        item.Header = main.RedoCommands[i].Name; 
        item.Click += new RoutedEventHandler(main.redoMenu_Click); 
        main._redoMenu.Items.Insert(0, item); 
       } 
      } 
      else if (dif < 0) 
      { 
       for (int i = 0; i < -dif; i++) 
        main._redoMenu.Items.RemoveAt(0); 
      } 
     } 
    } 

XAML:

<r:RibbonGroup GroupSizeDefinitions="{StaticResource RibbonLayoutSmall}"> 
     <r:RibbonGroup.Command> 
       <r:RibbonCommand LabelTitle="Editing"/> 
     </r:RibbonGroup.Command> 
     <r:RibbonSplitButton Name="_undoMenu" Command="me:AppCommands.Undo" MaxHeight="50"/> 
     <r:RibbonSplitButton Name="_redoMenu" Command="me:AppCommands.Redo" MaxHeight="50"/> 
</r:RibbonGroup> 

Actual Undo Menu Items

Undo Menu Items in Code

P.S.即使我將插入從零更改爲添加,所以它將添加到集合的最後一個,而不是第一個,它似乎沒有區別... 如果任何人都可以給我一些關於正在發生的事情的信息以及如何解決這個問題,將不勝感激。 在此先感謝。

回答

0

我通常在RibbonSplitButton中使用綁定。所以沒有看到你的問題。您可以嘗試RibbonSplitButton中的RibbonGallery並查看它是否有效。

或使用結合這樣的:反正

RSB.ItemsSource = new Collection<object> { new { Name = "Paste" }, new { Name = "InsertGlyph" } }; 

<rb:RibbonGroup Header="ABC"> 
    <rb:RibbonSplitButton x:Name="RSB"> 
     <rb:RibbonSplitButton.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Name}" /> 
      </DataTemplate> 
     </rb:RibbonSplitButton.ItemTemplate> 
    </rb:RibbonSplitButton> 
</rb:RibbonGroup> 
+0

我仍然無法弄清楚什麼是錯在這裏,但我創造了自己的歷史窗口撤銷/重做堆棧,所以我現在沒事了..謝謝.. – 2011-05-10 18:18:41