WPF RibbonControl图书馆RibbonSplitButton项目问题

WPF RibbonControl图书馆RibbonSplitButton项目问题,wpf,collections,stack,ribbon,undo-redo,Wpf,Collections,Stack,Ribbon,Undo Redo,我正在使用RibbonSplitButton来模拟VisualStudio的undo-redo按钮,并在下拉菜单中添加menuitems。 我们有撤销重做堆栈,我有一个dependencypropertychanged事件处理程序,它将根据堆栈更新UI。问题是,splitbutton的items属性正在使用一个集合,即使它的项集合的顺序正确,它也不会显示它们,因为它们是按索引排序的 为了更好地解释这一点,我将在下面提供一些示例: 代码: private static void UndoRedoU

我正在使用RibbonSplitButton来模拟VisualStudio的undo-redo按钮,并在下拉菜单中添加menuitems。 我们有撤销重做堆栈,我有一个dependencypropertychanged事件处理程序,它将根据堆栈更新UI。问题是,splitbutton的items属性正在使用一个集合,即使它的项集合的顺序正确,它也不会显示它们,因为它们是按索引排序的

为了更好地解释这一点,我将在下面提供一些示例:

代码:

private static void UndoRedoUpdated(DependencyObject对象、DependencyPropertyChangedEventArgs参数)
{
VO3Main main=(VO3Main)Application.Current.main窗口;
菜单项;
int-dif;
if(main.UndoCommands!=null)
{
dif=main.UndoCommands.Count-main.\u undommenu.Items.Count;
如果(dif>0)
{
对于(int i=dif-1;i>=0;i--)
{
item=新菜单项();
item.Header=main.UndoCommands[i].Name;
item.Click+=新建路由EventHandler(主.Undo菜单\u单击);
主菜单项插入(0,项);
}
}
否则如果(dif<0)
{
对于(int i=0;i<-dif;i++)
main.\u undoMenu.Items.RemoveAt(0);
}
}
if(main.RedoCommands!=null)
{
dif=main.redommands.Count-main.\u redommenu.Items.Count;
如果(dif>0)
{
对于(int i=dif-1;i>=0;i--)
{
item=新菜单项();
item.Header=main.redo命令[i].Name;
item.Click+=新建路由EventHandler(主.redo菜单\u单击);
主菜单项插入(0,项);
}
}
否则如果(dif<0)
{
对于(int i=0;i<-dif;i++)
main.\u redommenu.Items.RemoveAt(0);
}
}
}
XAML:


另外,即使我将0处的insert改为Add,那么它将添加到集合的最后一个而不是第一个,这似乎没有什么区别。。。 如果有人能给我一些关于正在发生什么以及如何解决这个问题的信息,我将不胜感激。
提前谢谢。

我通常在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>
RSB.ItemsSource=new集合{new{Name=“Paste”},new{Name=“InsertGlyph”};

我仍然不知道这里出了什么问题,但我已经为撤消/重做堆栈创建了自己的历史窗口,所以我现在没事了。。无论如何,谢谢你。。
<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>
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>