2011-04-19 67 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