WPF中的可自定义工具栏

时间:2010-07-15 08:37:09

标签: c# wpf

我想在我的应用程序中使用可自定义的工具栏,例如Visual Studio 2008提供的工具栏(右键单击工具栏,自定义)。我需要一个WPF解决方案,而我无法找到任何解决方案(无论是SO还是谷歌)。我确实找到了这个Visual Studio 2010 blog entry,这意味着即使是微软也有一些麻烦。所以无论如何,要保持简单,问题是,是否有任何提供此功能的开源/免费框架(它不一定是VS2008解决方案的精确复制品)。

2 个答案:

答案 0 :(得分:3)

我只是玩了一下,我认为单独使用WPF实现所需的行为应该相对容易(不需要额外的库或框架)。我添加了一个示例代码,用于将Button添加到ToolBar,后者又允许向工具栏添加更多按钮。

为了获得您想要的行为,我有一组工具栏按钮和另一个带有可用按钮的集合。工具栏ItemsSource将绑定到第一个集合。单击上下文菜单中的“自定义”按钮后,我只显示另一个带有两个ListViews的表单(每个表单绑定到其中一个集合)和按钮,用于添加/删除完整集合中的按钮到/从工具栏集合。 HTH。

代码:

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 :(得分:1)

由于ToolBar是ItemsControl,您可以尝试使用拖放框架来实现您想要的效果。

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

这是处理数据绑定项的绝佳解决方案。如果你没有使用数据绑定来显示你的ToolBar项目,你需要稍微自定义代码(尽管我建议你使用数据绑定'它会使自定义更加简单)。

当您点击应用中的“自定义”时,您可以打开包含可用项目的列表框(它必须位于同一窗口中才能使上述解决方案正常工作)并使用拖放工具栏和列表框进行拖放操作附属物。