2010-07-15 109 views
7

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

+0

您对如何添加上下文菜单中的工具栏托盘上或者是你想知道如何动态地添加图标和命令的问题基于用户喜好的工具栏? – 2010-07-20 14:05:15

+0

第二个,我不是真的有兴趣从头开始实施它,我知道该怎么做,我更喜欢某种可以节省我一些/大部分工作的框架。 – Ivan 2010-07-20 14:55:01

回答

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

这是一个杰出的答案。 – 2015-01-08 14:45:54

1

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

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

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

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