可定制的工具栏在WPF中

我想在我的应用程序中有可定制的工具栏,就像Visual Studio 2008提供的工具栏(右键单击工具栏上的自定义)。 我需要一个WPF解决方案,而且我还找不到任何(在SO或Google上)。 我确实发现了这个Visual Studio 2010博客条目,这意味着即使是微软在做这件事情时也遇到了一些麻烦。 因此,无论如何,为了简单起见,问题是,是否有任何提供此功能的开源/免费框架(它不一定是VS2008解决方案的精确副本)。


我只是玩了一会儿,我认为应该相对容易地实现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>

由于ToolBar是一个ItemsControl,你可以尝试使用拖放框架来实现你想要的。

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

这是处理数据绑定项目的绝佳解决方案。 如果你没有使用数据绑定来显示你的ToolBar项目,你需要定制一些代码(尽管我建议你使用数据绑定,这将使得定制更加简单)。

当您在应用程序中点击“自定义”时,您可以打开带有可用项目的列表框(它必须位于上述解决方案的同一窗口中),并使用附加属性启用拖放到工具栏和列表框。

链接地址: http://www.djcxy.com/p/46899.html

上一篇: Customizable Toolbar in WPF

下一篇: Why do inputs and selects use different box models?