我想在我的应用程序中使用可自定义的工具栏,例如Visual Studio 2008提供的工具栏(右键单击工具栏,自定义)。我需要一个WPF解决方案,而我无法找到任何解决方案(无论是SO还是谷歌)。我确实找到了这个Visual Studio 2010 blog entry,这意味着即使是微软也有一些麻烦。所以无论如何,要保持简单,问题是,是否有任何提供此功能的开源/免费框架(它不一定是VS2008解决方案的精确复制品)。
答案 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项目,你需要稍微自定义代码(尽管我建议你使用数据绑定'它会使自定义更加简单)。
当您点击应用中的“自定义”时,您可以打开包含可用项目的列表框(它必须位于同一窗口中才能使上述解决方案正常工作)并使用拖放工具栏和列表框进行拖放操作附属物。