WPF RibbonControlsLibrary RibbonSplitButton Проблема с элементами - PullRequest
0 голосов
/ 19 апреля 2011

Я использую RibbonSplitButton с пунктами меню в раскрывающемся меню, чтобы имитировать кнопку отмены повтора в Visual Studio.У нас есть стеки отмены повторения, и у меня есть обработчик событий зависимостей, который обновит интерфейс на основе стеков.Проблема в том, что свойство items в splitbutton использует коллекцию, и, хотя его коллекция элементов находится в правильном порядке, они не будут отображаться, поскольку они упорядочены по индексу.

Ниже я приведу несколько примеров, чтобы объяснить это лучше:

Код:

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

PS Даже если я поменяю вставку в 0 на Add, так что она будет добавлена ​​в последнюю из коллекции вместо первой, это, кажется, не имеет значения.... если кто-нибудь может дать мне некоторую информацию относительно того, что происходит и как обойти это, это будет очень цениться.Заранее спасибо.

1 Ответ

0 голосов
/ 19 апреля 2011

Я обычно использую привязку в RibbonSplitButton.Так что не видел вашу проблему.Вы можете попробовать RibbonGallery в RibbonSplitButton и посмотреть, работает ли он.

Или использовать привязку так:

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>
...