我使用了一个下拉菜单中带有菜单项的RibbonSplitButton来模仿visual studio的撤销重做按钮。我们有撤销重做堆栈,我有一个依赖属性更改事件处理程序,它将根据堆栈更新UI。问题是,拆分按钮的items属性使用了一个Collection,即使它的项目集合的顺序是正确的,它也不会按照索引的顺序显示它们。
我将在下面提供一些例子来更好地解释这一点:
代码:
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>


另外,即使我将0处的insert改为Add,因此它将添加到集合的最后一个而不是第一个,这似乎没有什么不同……如果有人能给我一些关于正在发生的事情以及如何解决这个问题的信息,我将不胜感激。提前谢谢。
发布于 2011-04-19 22:24:07
我通常在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>https://stackoverflow.com/questions/5717742
复制相似问题