2010-07-15 148 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項目,你需要定製一些代碼(儘管我建議你使用數據綁定,這將使得定製更加簡單)。

當您在應用程序中點擊「自定義」時,您可以打開帶有可用項目的列表框(它必須位於上述解決方案的同一窗口中才能工作),並啓用拖放到工具欄和列表框使用附加的屬性。