2009-10-19 12 views
5

का उपयोग किए बिना मेरे वीएम में किसी संग्रह में बाध्य करने के लिए WPF टूलबार कैसे प्राप्त करें मेरे पास एक WPF विंडो है जिसमें ToolBar है। मेरे पास मेरे वीएम में ऑब्जेक्ट्स का संग्रह है जो मैं बाध्यकारी हूं। वे बटन के रूप में दिखाई देते हैं लेकिन वे हमेशा ToolBar के विस्तारित ड्रॉप डाउन हिस्से में धकेल जाते हैं। मैं उन बटनों को ToolBar के मानक भाग में कैसे प्रदर्शित करूं?विस्तारक

मैं निम्नलिखित XAML है:

<ToolBarTray Grid.Row="1"> 
    <ToolBar ItemsSource="{Binding Path=MyList}" > 
     <ToolBar.ItemTemplate> 
      <DataTemplate > 
       <Button ToolTip="{Binding ButtonName}" 
         Command="{Binding Path=ButtonCommand}" > 
        <Button.Content> 
         <Image Width="32" Height="32" Source="{Binding ImageSource}"/> 
        </Button.Content> 
       </Button> 
      </DataTemplate> 
     </ToolBar.ItemTemplate> 
    </ToolBar> 
</ToolBarTray> 

मैं निम्नलिखित सी # है:

public List<MyClass> MyList 
    { 
     get 
     { 
      return new List<MyClass> 
         { 
          new MyClass{ButtonName="Button1",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
          new MyClass{ButtonName="Button2",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
          new MyClass{ButtonName="Button3",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
          new MyClass{ButtonName="Button4",[email protected]"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"}, 
         }; 

     } 
    } 

यह दृश्य परिणाम है:

alt text

+0

यदि मैं टूलबार 500 की स्थिर चौड़ाई देता हूं, तो वही दृश्य परिणाम होता है –

+0

क्या आप अधिक विशिष्ट – Shimmy

+0

@Shimmy हो सकते हैं, मुझे नहीं लगता कि मैं और अधिक विशिष्ट हो सकता हूं लेकिन मैं कोशिश करूंगा। मैं टूलबार –

उत्तर

4

में एक बग नहीं है टूलबार, यदि आप विंडो को दोबारा आकार देते हैं, तो समस्या दूर हो जाती है। अधिक जानकारी के लिए

public class WorkaroundToolBar : ToolBar 
{ 
    private delegate void IvalidateMeasureJob(); 

    public override void OnApplyTemplate() 
    { 
     Dispatcher.BeginInvoke(new IvalidateMeasureJob(InvalidateMeasure), 
            DispatcherPriority.Background, null); 
     base.OnApplyTemplate(); 
    } 
} 

चेक बाहर this thread

+0

के मानक (गैर-बहने वाले) भाग में दिखाने के लिए मेरे टूलबार में उन बटनों को चाहता हूं दुर्भाग्यवश, यह काम नहीं किया। आप सही हैं, जब मैं स्क्रीन का आकार बदलता हूं, तो बटन अपेक्षा के अनुसार दिखाई देते हैं। –

+0

मेरी मशीन में काम करता है, मैंने बनाया यह बेयरबोन नमूना http://www.bizcacha.com/public/WpfApplication3.rar –

+0

यह समाधान सीधे मेरे लिए काम नहीं करता है। हालांकि मैंने आपके आपूर्ति किए गए नमूने की जांच नहीं की है। – Oskar

1

तुम भी एक उचित मूल्य, जिनके लिए काम किया है करने के लिए XAML में उपकरण पट्टी की ऊंचाई सेट कर सकते हैं:

समाधान एक और नियंत्रण उपयोग कर रहा है, जैसे मुझे।

1

एडुआर्डो के लिए जोड़ने के लिए, मैं थोड़ा इस बदलाव करने के बाद से अपने मद स्रोत एसिंक्रोनस रूप से आबादी वाले मिल रही थी, कुछ समय के बाद प्रारंभिक यूआई प्रदर्शित किया जाता है था, यह सब किनारे मामलों को पकड़ने के लिए पर्याप्त था

public class ToolBar : System.Windows.Controls.ToolBar 
{ 
    public override void OnApplyTemplate() 
    { 
     Dispatcher.BeginInvoke ((Action)(InvalidateMeasure), DispatcherPriority.Background, null); 
     base.OnApplyTemplate(); 
    } 
    protected override void OnItemsChanged (NotifyCollectionChangedEventArgs e) 
    { 
     base.OnItemsChanged (e); 
     Dispatcher.BeginInvoke ((Action)(InvalidateMeasure), DispatcherPriority.Background, null); 
    } 
} 

और है वस्तुओं की आबादी के बाद जरूरी ओवरफ्लो ठीक तरह से होता है।

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