2009-06-26 10 views
83

एक नेस्टेड डब्ल्यूपीएफ टूलबारपेल-टूलबार-मेन्यू में हम बाएं हाथ के पकड़ संभाल से छुटकारा पाने के लिए और दाईं ओर ओवरफ्लो क्षेत्र से छुटकारा पाना चाहते हैं। वे दोनों ग्रे हो गए हैं, लेकिन हम उन्हें बिल्कुल प्रदर्शित नहीं करना चाहते हैं।डब्ल्यूपीएफ टूलबार: पकड़ और ओवरफ्लो को कैसे हटाएं

इसे पूरा करने के तरीके पर कोई विचार?

बस अगर मेरी शर्तें पूरी तरह से सही नहीं हैं, तो यदि आप नीचे दिए गए लिंक के चित्र 3 में छवि को देखते हैं, तो तीन टूलबार में से सबसे कम पर ड्रॉपडाउन के बाईं ओर और दाईं ओर दाईं ओर पकड़ है दाएं सबसे अधिक बटन ओवरफ्लो है।

Image of toolbars

+0

आप शायद यह कर सकता है .. लेकिन मैं इसकी सिफारिश नहीं करता। – apandit

+0

आप दाईं ओर धक्का देने के लिए टूलबार पर मार्जिन = "0,0, -14,0" डाल सकते हैं। यह मैंने पाया है कि यह सबसे आसान समाधान है, लेकिन मैंने केवल एक टूलबार के साथ परीक्षण किया है जो टूलबारपनेल या टूलबारर्रे के अंदर नहीं है। जानकारी के लिए –

उत्तर

128

टूलबार पर संलग्न संपत्ति ToolBarTray.IsLocked="True" सेट करके पकड़ को हटाया जा सकता है।

Overflow ToggleButton को हटाने के लिए, आपको इसे कस्टम कंट्रोल टेम्पलेट में हटा देना होगा क्योंकि छहलेटरवायरबल्स सुझाव देते हैं, यदि आप मिश्रण करते हैं या मिश्रण 3 पूर्वावलोकन डाउनलोड कर सकते हैं तो यह मुश्किल नहीं है।

आप टूलबार की लोड की गई घटना में बटन को भी छुपा सकते हैं, हालांकि जो भी मार्ग आप लेते हैं, आपको टूलबार के मेनू पर संलग्न संपत्ति ToolBar.OverflowMode="Never" भी सेट करनी चाहिए, ताकि आइटम गलती से पहुंचने योग्य क्षेत्र में बह जाए। अतिप्रवाह को छिपाने के लिए

private void ToolBar_Loaded(object sender, RoutedEventArgs e) 
{ 
    ToolBar toolBar = sender as ToolBar; 
    var overflowGrid = toolBar.Template.FindName("OverflowGrid", toolBar) as FrameworkElement; 
    if (overflowGrid != null) 
    { 
     overflowGrid.Visibility = Visibility.Collapsed; 
    } 
    var mainPanelBorder = toolBar.Template.FindName("MainPanelBorder", toolBar) as FrameworkElement; 
    if (mainPanelBorder != null) 
    { 
     mainPanelBorder.Margin = new Thickness(); 
    } 
} 
+10

सवाल उठता है: टूलबार का उपयोग क्यों करें? क्यों न सिर्फ बटन के साथ एक साधारण StackPanel का उपयोग करें? टूलबार क्या लाभ प्रदान करता है? –

+3

जोश जी के जवाब में: यदि आप एक सामान्य पैनल (स्टैकपैनेल इत्यादि) पर एक छवि के साथ एक पारदर्शी बटन का उपयोग करते हैं तो इसकी एक सफेद रूपरेखा होगी। जब टूलबार पर एक ही बटन रखा जाता है, तो सफेद रूपरेखा मौजूद नहीं होती है। –

+1

यह भी उपयोगी है अगर आप इस संदर्भ में टूलबार की थीमिंग चाहते हैं, उदा। माउसओवर व्यवहार। –

8

आप कर सकते हैं use Blend to rather simply override the ControlTemplate ToolBarPanel, मेनू, या उपकरण पट्टी के लिए।

  1. सीधे टूलबार पर क्लिक करें और टेम्पलेट संपादित
  2. टेम्पलेट संपादित से, संपादित एक कॉपी
  3. मैं एक संसाधन शब्दकोश
  4. ठीक क्लिक करें

के प्रति जोड़ने की सलाह देते चयन आप अब टूलबारपनेल के लिए नियंत्रण टेम्पलेट संपादित कर रहा है, और पकड़ और ओवरफ्लो सिग्नल के लिए संपीड़ित करने के लिए दृश्यता सेट कर सकता है। आप अन्य नियंत्रणों के लिए कुल्ला और दोहराना कर सकते हैं। यह थोड़ा सा समय ले रहा है, लेकिन मिश्रण के साथ बहुत मुश्किल नहीं है।

+0

धन्यवाद। दुर्भाग्यवश mix2 और vs2008 हमारे लिए अच्छी तरह से काम नहीं कर रहे हैं, जब कोई दूसरे में उत्पन्न कोड के साथ काम करता है तो बहुत सारी समस्याएं होती हैं, इसलिए वर्तमान में हम अपने बनाम कोड के पास कहीं भी मिश्रण नहीं देते हैं;) – Tom

+1

हाँ हमने काफी मिश्रण किया धार्मिक रूप से VS2k8SP1 के आसपास आया था। असल में मैं वीएस 2 के 8 डब्ल्यूएएस ब्लेंड में डब्ल्यूपीएफ संपादक की कामना करता हूं। कुछ अच्छी तरह से कुछ क्लिक करने में सक्षम होने के लिए और 'स्टैकपैनेल' या 'सीमा' समूह में समूह कहने में सक्षम होना बहुत अच्छा है। बहुत बुरा एमएस चाहता है कि वे अलग अनुभव हों। – user7116

+0

मुझे लगता है कि नया एक्सएएमएल पावर खिलौने एक ऐसी सुविधा जोड़ता है जो आपको समूह नियंत्रणों की अनुमति देता है। (शायद यह MoXAML पावर खिलौने है ...) – Number8

0

काम उपरोक्त विधियों;:

<ToolBarPanel DockPanel.Dock="Top"> 
    <ToolBar ToolBarTray.IsLocked="True" Loaded="ToolBar_Loaded"> 
     <Menu ToolBar.OverflowMode="Never"> 
      <MenuItem Header="File" /> 
      <MenuItem Header="New" /> 
     </Menu> 
    </ToolBar> 
</ToolBarPanel> 

और ढह को ओवरफ्लो ToggleButton सेट मैं ग्रिपर को छिपाने के लिए निम्नलिखित का उपयोग किया है:

  <Label Height="44" Width="30" Background="{StaticResource CtrlBackground}" Margin="-20,0,0,0"></Label> 
एक क्षैतिज लेआउट के लिए

, और

  <Label Height="44" Width="230" Background="{StaticResource CtrlBackground}" Margin="0,-20,0,0" HorizontalAlignment="Left"></Label> 
एक कार्यक्षेत्र लेआउट के लिए

। टूलबार के बाद उपरोक्त रखें (या टूलबारट्रे, यदि इसका उपयोग कर रहे हैं)

अपने बटन के लिए जो भी चौड़ाई और ऊंचाई की आवश्यकता है उसका उपयोग करें।

कक्समल इस सामान के साथ खेलने के लिए उत्कृष्ट है।

2

मैं सिर्फ WPF के साथ शुरू कर रहा हूं और मेरे ओवरफ़्लो तीर (विजुअल स्टूडियो 2010) को छिपाने के लिए उपर्युक्त तरीकों में से कोई भी नहीं मिला।तीर को प्रभावित करने वाली एकमात्र चीज़ उपरोक्त टूलबार_लोड उदाहरण था, लेकिन जो कुछ भी किया गया वह तीर को रिक्त स्थान में बदल देता था जो तीर के रूप में खराब दिखता था। टूलबार के मार्जिन सेट करने के लिए मैं सबसे आसान तरीका समझ सकता था।

<ToolBar Height="26" 
     Name="toolBar" 
     DockPanel.Dock="Top" 
     ToolBarTray.IsLocked="True" 
     ToolBar.OverflowMode="Never"  <!-- no effect --> 
     Margin="0,0,-13,0">     <!-- worked --> 
     <Menu ToolBar.OverflowMode="Never"> <!-- no affect --> 
      <MenuItem Header="_File"></MenuItem> 
     </Menu> 
</ToolBar> 
+2

कोई भी मेरे लिए काम नहीं करता है। विजुअल स्टूडियो 2015 –

3

आप ToolBar की स्थापना नकारात्मक सही मार्जिन के लिए करके एक नया नियंत्रण टेम्पलेट की आपूर्ति के बिना अतिप्रवाह "निकालें" कर सकते हैं (और एक नकारात्मक बाईं मार्जिन में फेंक तो यह गोल बाएं किनारों लेकिन वर्ग के साथ अजीब नहीं लगती है दाएं किनारों)। फिर, ClipToBounds="True"ToolBarPanel पर जोड़ें जो टूलबार के किनारों को काट देगा जो अब पैनल के क्षेत्र के बाहर चिपके हुए हैं।

<ToolBarPanel Grid.Row="0" ClipToBounds="True"> 
    <ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0"> 
    . . . 
3

अतिप्रवाह बटन को पूरी तरह से छिपाने की बजाय, मुझे लगता है कि यह आवश्यक होने पर ही इसे दिखाने के लिए बेहतर है। यह अपने IsEnabled संपत्ति के लिए अपने Visibility संपत्ति बाध्यकारी द्वारा किया जा सकता:

private static void FixupToolBarOverflowArrow(ToolBar toolBar) 
{ 
    Action fixup =() => 
    { 
     var overflowButton = toolBar.Template.FindName("OverflowButton", toolBar) as ButtonBase; 
     if (overflowButton != null) 
     { 
      overflowButton.SetBinding(
       VisibilityProperty, 
       new Binding("IsEnabled") 
       { 
        RelativeSource = RelativeSource.Self, 
        Converter = new BooleanToVisibilityConverter() 
       }); 
     } 
    }; 

    if (toolBar.IsLoaded) 
    { 
     fixup(); 
    } 
    else 
    { 
     RoutedEventHandler handler = null; 
     handler = (sender, e) => 
     { 
      fixup(); 
      toolBar.Loaded -= handler; 
     }; 

     toolBar.Loaded += handler; 
    } 
} 

(एक ही बात XAML में किया जा सकता टेम्पलेट फिर से परिभाषित करने के द्वारा) नियंत्रण टेम्पलेट ओवरराइट करके

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