Настраиваемая панель инструментов в WPF - PullRequest
7 голосов
/ 15 июля 2010

Мне бы хотелось, чтобы в моем приложении были настраиваемые панели инструментов, например, предлагаемые Visual Studio 2008 (щелкните правой кнопкой мыши на панели инструментов, настройте).Мне нужно решение WPF, и я не смог его найти (ни в SO, ни в Google).Я нашел эту запись в блоге Visual Studio 2010 , из которой следует, что даже у Microsoft были некоторые проблемы с этим.Так или иначе, чтобы не усложнять ситуацию, вопрос в том, есть ли какой-либо фреймворк с открытым исходным кодом, который предоставляет эту функциональность (она не должна быть точной копией решения VS2008).

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

Я просто немного поигрался, и я думаю, что реализовать желаемое поведение с помощью одного 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>
1 голос
/ 19 июля 2010

Поскольку ToolBar - это ItemsControl, вы можете попытаться использовать каркас перетаскивания для достижения желаемого.

http://bea.stollnitz.com/blog/?p=53

Это отличное решение для обработки привязки к даннымПредметы.Вам нужно будет немного изменить код, если вы не используете привязку данных для отображения элементов панели инструментов (хотя я предлагаю вам использовать привязку данных, это значительно упростит сохранение настроек).

КогдаКогда вы нажмете «настроить» в своем приложении, вы можете открыть ListBox с доступными элементами (он должен находиться в том же окне, чтобы вышеуказанное решение работало) и включить перетаскивание из / в панели инструментов и ListBox, используя свойство присоединенного элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...