2013-03-19 8 views
7

ले जाने पर ध्यान केंद्रित करें मेरे डब्ल्यूपीएफ एप्लिकेशन में मैं एक मेनू आइटम को एक टेक्स्ट बॉक्स रखना चाहता हूं। मैं इस निम्नलिखित कोड का उपयोग कर में कामयाब रहे:डब्ल्यूपीएफ टेक्स्टबॉक्स मेनू Item माउस

<Menu Height="23" HorizontalAlignment="Stretch" Name="MainMenu" VerticalAlignment="Top"> 
    <MenuItem Header="File"> 
     <MenuItem Header="Exit" Click="menuItemExit_Click" /> 
    </MenuItem> 
    <MenuItem Header="Settings"> 
     <MenuItem Header="Some setting" IsCheckable="True" /> 
     <Separator /> 
     <MenuItem> 
      <MenuItem.Header> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto" /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <Label Content="Some value:" Margin="0,3,6,0" Padding="0" /> 
        <TextBox Margin="0,0,0,6" Grid.Column="1" /> 
       </Grid> 
      </MenuItem.Header> 
     </MenuItem> 
    </MenuItem> 
</Menu> 

इस कोड को मेनू आइटम प्रदर्शित करता है जैसे मैं उम्मीद लेकिन अगर मैं से पाठ बॉक्स में कुछ मूल्य टाइप करना आरंभ करें और फिर माउस (क्लिक नहीं) के लिए कदम दूर टेक्स्ट बॉक्स मेनू आइटम, टेक्स्ट बॉक्स फोकस खो देता है और जब तक मैं टेक्स्ट बॉक्स पर दोबारा क्लिक नहीं करता तब तक मैं टाइपिंग जारी नहीं रख सकता। WinForms में टेक्स्ट बॉक्स मेनू आइटम के समान व्यवहार कैसे प्राप्त कर सकता हूं? यही है, यदि टेक्स्ट टेक्स्ट बॉक्स के बाहर क्लिक करता है या टैब कुंजी हिट करता है तो टेक्स्ट बॉक्स केवल फोकस खो देता है।

अग्रिम धन्यवाद।

उत्तर

5

जैसा कि मैंने लिखा था मुझे यकीन है कि कैसे आप अपने मेनू नियंत्रण का उपयोग नहीं कर रहा हूँ। लेकिन शायद इस कोड को कतरना आप मदद कर सकते हैं या आप एक संकेत दे:

<TextBox Margin="0,0,0,6" Grid.Column="1" PreviewLostKeyboardFocus="OnPreviewLostKeyboardFocus"/> 

और अनुसार विधि:

private void OnPreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
    { 
    if (MainMenu.IsKeyboardFocusWithin) 
    { 
     e.Handled = true; 
    } 
    } 
+0

यह मेरी समस्या तय है, बहुत बहुत धन्यवाद! – dbostream

+0

आपका स्वागत है! :-) – rhe1980

+1

यदि आपके पास एक ही मेनू में एक से अधिक हैं, तो यह केवल e.Handled सेट करने में मदद करता है अगर (e.NewFocus MenuItem है)। इस तरह, आप अभी भी एक ही मेनू में एक अलग टेक्स्टबॉक्स पर क्लिक कर सकते हैं। –

0

हो सकता है कि इस मदद करता है:

<MenuItem StaysOpenOnClick="True"> 
     <MenuItem.Header> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <Label Content="Some value:" Margin="0,3,6,0" Padding="0" /> 
       <TextBox Margin="0,0,0,6" Grid.Column="1" /> 
      </Grid> 
     </MenuItem.Header> 
    </MenuItem> 
+0

मुझे डर है कि यह नहीं करता है, लेकिन वैसे भी धन्यवाद। जब मैं माउस पर क्लिक करता हूं तो व्यवहार पहले से ही अच्छा होता है, समस्या यह है कि जब मैं कर्सर को टेक्स्ट बॉक्स मेनू आइटम के बाहर ले जाता हूं क्योंकि यह फोकस खो देता है और मैं अब टाइप नहीं कर सकता। – dbostream

+0

ओह, मेरी गलती। मुझे आपका प्रश्न सही नहीं मिला, क्षमा करें। मैंने आपके चिपकाए गए कोड की कोशिश की और मुझे आपके द्वारा वर्णित व्यवहार नहीं मिला। क्या आपके पास कुछ और जानकारी है? (MenuItem, आदि के आसपास के xaml तत्व) – rhe1980

1

मैं जानता हूँ कि क्या यह उत्तर शायद आप मदद करने के लिए जिस तरह से बहुत देर हो चुकी है, लेकिन शायद यह इस मुद्दे पर किसी भी फिक्स को खोजने में मदद करेगा।

मेनूइटम पर Focusable=false सेट करना भी काम करता है। यह अभी भी उन्हें क्लिक करने की अनुमति देता है और उनके निहित नियंत्रणों को ध्यान केंद्रित करने की अनुमति देता है। हालांकि, यह केवल अभिगम्यता समस्या का परिचय देते हुए, कीबोर्ड का उपयोग करके मेनू पर नेविगेट करने की क्षमता को अक्षम करता है।

अभिगम्यता समस्या को थोड़ा रचनात्मकता के साथ हल किया जा सकता है, हालांकि, प्रत्येक मेनू आइटम को एक फोकस करने योग्य तत्व देकर। उदाहरण के लिए:

<MenuItem Focusable="False"> 
    <MenuItem.Header> 
     <StackPanel Orientation="Horizontal" Focusable="True" FocusVisualStyle="{x:Null}"> 
      <TextBlock Text="Do something!" /> 
     </StackPanel> 
    </MenuItem.Header> 
</MenuItem> 

FocusVisualStyle="{x:Null}" कोड बिंदीदार फोकस है कि अन्यथा प्रकट होता छिपाने के लिए आवश्यक (और एक मेनू में जगह से बाहर लग रहा है) है।

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