【问题标题】:Customizable Toolbar in WPFWPF 中的可自定义工具栏
【发布时间】:2010-07-15 08:37:08
【问题描述】:

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

【问题讨论】:

  • 您是关于如何在工具栏托盘上添加上下文菜单的问题,还是想知道如何根据用户偏好动态向工具栏添加图标和命令?
  • 第二个,我对从头开始实现它并不感兴趣,我知道该怎么做,我对某种可以节省我一些/大部分工作的框架更感兴趣.

标签: c# wpf


【解决方案1】:

我只是玩了一下,我认为单独使用 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>

【讨论】:

  • 这是一个出色的答案。
【解决方案2】:

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

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

这是处理数据绑定项目的绝佳解决方案。如果您不使用数据绑定来显示您的工具栏项目,则需要稍微自定义代码(尽管我建议您使用数据绑定'这将使保存自定义更加简单)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2013-08-20
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2018-06-24
    相关资源
    最近更新 更多