Я просто немного поигрался, и я думаю, что реализовать желаемое поведение с помощью одного WPF должно быть относительно просто (дополнительная библиотека или фреймворк не требуются). Я включил пример кода для добавления Button
к ToolBar
, что, в свою очередь, позволяет добавить больше кнопок на панель инструментов.
Чтобы получить желаемое поведение, у меня будет набор кнопок для панели инструментов и другая коллекция с доступными кнопками. Панели инструментов ItemsSource
будут привязаны к первой коллекции. После нажатия кнопки «настроить» в контекстном меню я просто показал бы другую форму с двумя ListViews
(каждая привязана к одной из коллекций) и кнопками для добавления / удаления кнопок в полной коллекции в / из коллекции панелей инструментов , НТН.
Код:
public ObservableCollection<Button> Buttons { get; set; }
public MainWindow()
{
InitializeComponent();
Buttons = new ObservableCollection<Button>();
AddButton();
DataContext = this;
}
private void ButtonAddButton_Click(object sender, RoutedEventArgs e)
{
AddButton();
}
private void AddButton()
{
var button = new Button();
button.Content = "Add Button (" + Buttons.Count + ")";
button.Click += ButtonAddButton_Click;
Buttons.Add(button);
}
XAML:
<Grid>
<ToolBarTray>
<ToolBar ItemsSource="{Binding Buttons}">
<ToolBar.ContextMenu>
<ContextMenu>
<MenuItem Header="Customize" />
</ContextMenu>
</ToolBar.ContextMenu>
</ToolBar>
</ToolBarTray>
</Grid>