2009-08-21 12 views
16

जब भी मैं एक मेनू टेम्पलेट को DataTemplate संलग्न करता हूं, तो प्रत्येक जेनरेट किए गए मेनू आइटम को बाईं तरफ एक अतिरिक्त स्थान मिलता है। यह अतिरिक्त स्थान चेक के लिए आरक्षित स्थान के रूप में चौड़ा दिखता है, जिसका मैं उपयोग करता हूं। डेटा टेम्पलेट के बिना मैन्युअल रूप से मेनू बनाना इस अतिरिक्त स्थान को जोड़ता नहीं है। एक अतिरिक्त शिकन के रूप में, यदि मैं इस अतिरिक्त स्थान पर क्लिक करता हूं तो मेनू आइटम चला जाता है लेकिन कोई क्लिक ईवेंट उत्पन्न नहीं होता है। मुझे नहीं पता कि यह अतिरिक्त जगह क्यों जोड़ रहा है। कोई विचार?मेनूइटम के लिए डेटा टेम्पलेट का उपयोग करने के लिए बाईं ओर अतिरिक्त स्थान दिखाई देने का कारण बनता है?

मेरी XAML कोड अधिक आसान नहीं हो सकता है: वर्णित अतिरिक्त स्पेस के

मेनू:

<Menu> 
    <MenuItem Header="Utilities" > 
     <MenuItem Header="Enemy01"/> 
     <MenuItem Header="Enemy02"/> 
     <MenuItem Header="Enemy03"/> 
    </MenuItem> 
</Menu> 
+0

अधिक जानकारी: https://github.com/fluentribbon/Fluent.Ribbon/issues/ 188 – juFo

+0

और यह भी देखें: http://stackoverflow.com/questions/19965464/wpf-menuitem-icon-in-the-wrong-place-when-using-data-template?rq=1 – juFo

उत्तर

39

यह क्योंकि दृश्य पेड़ का उत्पादन किया है:

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemTemplate> 
      <DataTemplate> 
       <MenuItem Header="{Binding}"> 
       </MenuItem> 
      </DataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

अतिरिक्त रिक्त स्थान के बिना मेनू आपके DataTemplate द्वारा एक कंटेनर में लपेटा जाएगा - इस मामले में, MenuItem। इसलिए, आपके पास वास्तव में MenuItem है MenuItem के भीतर, जो अतिरिक्त स्थान और अंतःक्रियाशीलता की कमी बताता है। MenuItem को अपने ItemTemplate में शामिल करने की आवश्यकता नहीं है।

आपका उदाहरण बजाय रूप में लिखा जा सकता है:

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}"/> 
      </DataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

या, शायद अधिक संक्षेप:

<Menu> 
    <MenuItem Header="Enemies" ItemsSource="{Binding AvailableEnemyClasses}"> 
     <MenuItem.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
       <Setter Property="Header" Value="{Binding}"/> 
       <Setter Property="IsChecked"> 
        <Setter.Value> 
         <MultiBinding Converter="{StaticResource YourConverter}"> 
          <Binding .../> 
          <Binding .../> 
         </MultiBinding> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </MenuItem.ItemContainerStyle> 
    </MenuItem> 
</Menu> 
+0

आपके उत्तर के लिए धन्यवाद! मेरे पास एक और सवाल था: एक आइटमकंटनर स्टाइल के साथ, मैं मेनूइटम की Ischecked संपत्ति को एक बहुआयामी में कैसे बांधूं? – djcouchycouch

+0

कोई समस्या नहीं है। यह शायद एक अलग सवाल होना चाहिए, लेकिन मैंने आपको यह दिखाने के लिए अपना जवाब अपडेट किया। –

+0

आह, अब मैं समझता हूं। धन्यवाद केंट! – djcouchycouch

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