WPF

2010-07-15 8 views
7

में अनुकूलन योग्य टूलबार मैं अपने एप्लिकेशन में कस्टमाइज करने योग्य टूलबार रखना चाहता हूं, जैसे विजुअल स्टूडियो 2008 (टूलबार पर राइट क्लिक करें, कस्टमाइज़ करें)। मुझे एक डब्ल्यूपीएफ समाधान चाहिए, और मैं कोई भी नहीं ढूंढ पाया (न तो SO, या Google पर)। मुझे यह Visual Studio 2010 blog entry मिला, जिसका अर्थ है कि माइक्रोसॉफ्ट को भी ऐसा करने में कुछ परेशानी थी। तो वैसे भी, इसे सरल रखने के लिए, सवाल यह है कि क्या कोई खुला स्रोत/मुक्त ढांचा है जो इस कार्यक्षमता को प्रदान करता है (इसे वीएस -2008 के समाधान की सटीक प्रतिकृति नहीं है)।WPF

+0

कैसे उपकरण पट्टी ट्रे पर एक संदर्भ मेनू में जोड़ने के लिए या आप को पता है कैसे गतिशील प्रतीक जोड़ सकते हैं और आदेश के लिए इच्छुक रहे हैं के बारे में आपका प्रश्न है उपयोगकर्ता प्राथमिकताओं के आधार पर टूलबार? –

+0

दूसरा, और मैं इसे खरोंच से लागू करने में वास्तव में रूचि नहीं रखता हूं, मुझे पता है कि कैसे करना है, मुझे कुछ प्रकार के ढांचे में अधिक दिलचस्पी है जो मुझे कुछ/सबसे अधिक काम बचाएगा। – Ivan

उत्तर

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

चूंकि टूलबार एक आइटम नियंत्रण है, इसलिए आप जो चाहते हैं उसे प्राप्त करने के लिए ड्रैग और ड्रॉप फ्रेमवर्क का उपयोग करने का प्रयास कर सकते हैं।

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

इस डेटा-बाउंड आइटम निपटने के लिए एक महान समाधान है। यदि आप अपने टूलबार आइटम दिखाने के लिए डेटा बाध्यकारी का उपयोग नहीं कर रहे हैं, तो आपको कोड को थोड़ा कस्टमाइज़ करना होगा (हालांकि मुझे सुझाव है कि आप डेटा बाध्यकारी का उपयोग करें 'यह अनुकूलन को अधिक सरल बना देगा)।

जब आप अपने ऐप में "कस्टमाइज़" करते हैं तो आप उपलब्ध वस्तुओं के साथ एक सूची बॉक्स खोल सकते हैं (यह उपर्युक्त समाधान के लिए उसी विंडो में होना चाहिए) और टूलबार और लिस्टबॉक्स से ड्रैग-एंड-ड्रॉप सक्षम करें संलग्न संपत्ति का उपयोग कर।

संबंधित मुद्दे