2009-08-02 11 views
8

मैं अपने WPF अनुप्रयोग में मुख्य मेनू चाहते हैं IE8 में मुख्य मेनू की तरह व्यवहार करने के लिए:मैं WPF में Alt कुंजी का उपयोग करके मुख्य मेनू दृश्यता को कैसे टॉगल कर सकता हूं?

  • यह दिखाई दे रहा है कि एप्लिकेशन
  • शुरू होता दबाकर और जारी करने के लिए Alt बनाता नहीं है यह दिखाई
  • दबाकर और Alt फिर से जारी बनाता है यह अदृश्य फिर
  • ऊब

मैं यह कैसे कर सकते हैं जब तक दोहराने? क्या यह कोड होना चाहिए?

जवाब के जवाब में जोड़ा गया प्रस्तुत की, क्योंकि मैं अभी भी समस्या हो रही है:

मेरे शैल कोड-पीछे अब इस तरह दिखता है:

public partial class Shell : Window 
{ 
    public static readonly DependencyProperty IsMainMenuVisibleProperty; 

    static Shell() 
    { 
     FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(); 
     metadata.DefaultValue = false; 

     IsMainMenuVisibleProperty = DependencyProperty.Register(
      "IsMainMenuVisible", typeof(bool), typeof(Shell), metadata); 
    } 

    public Shell() 
    { 
     InitializeComponent(); 

     this.PreviewKeyUp += new KeyEventHandler(Shell_PreviewKeyUp); 
    } 

    void Shell_PreviewKeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.SystemKey == Key.LeftAlt || e.SystemKey == Key.RightAlt) 
     { 
      if (IsMainMenuVisible == true) 
       IsMainMenuVisible = false; 
      else 
       IsMainMenuVisible = true; 
     } 
    } 

    public bool IsMainMenuVisible 
    { 
     get { return (bool)GetValue(IsMainMenuVisibleProperty); } 
     set { SetValue(IsMainMenuVisibleProperty, value); } 
    } 
} 
+1

आप Internet Explorer की नकल करना चाहते हैं ...? –

+0

मैं अपने ऐप्स को उपयोगकर्ताओं की अपेक्षा के अनुरूप रखने की कोशिश करता हूं, इसलिए हां। :-) – serialhobbyist

+0

स्थिरता के लिए समान व्यवहार को ट्रिगर करने के लिए F10 कुंजी के साथ-साथ खाता भी हो सकता है। – genus

उत्तर

8

आप विंडो पर PreviewKeyDown ईवेंट का उपयोग कर सकते हैं। Alt कुंजी का पता लगाने के लिए आपको KeyEventArgs की संपत्ति की जांच करने की आवश्यकता होगी, क्योंकि उस मुख्य संपत्ति के विपरीत जो आप आमतौर पर अधिकांश अन्य कुंजी के लिए उपयोग करते हैं।

आप इस घटना का उपयोग bool मान सेट करने के लिए कर सकते हैं जिसे विंडोज कोड में DependencyProperty के रूप में घोषित किया गया है।

मेनू की Visibility संपत्ति BooleanToVisibilityConverter का उपयोग करके इस संपत्ति के लिए बाध्य हो सकती है।

<Menu 
    Visibility={Binding Path=IsMenuVisibile, 
     RelativeSource={RelativeSource AncestorType=Window}, 
     Converter={StaticResource BooleanToVisibilityConverter}} 
    /> 
+0

मुझे यह काम नहीं मिल रहा है। मैंने मूल निर्भरता को मेरे निर्भरता प्रॉपर्टी के लिए कोड-बैक के साथ अपडेट किया है। यह पहली बार है जब मैंने अपना खुद का घोषित कर दिया है ... मैंने शैल.एक्सएएमएल में मेनू में अपना बाध्यकारी जोड़ा है और मुझे जो त्रुटि मिल रही है वह है: सिस्टम। विंडोज़। डेटा त्रुटि: 39: बाइंडिंग एक्सप्शन पथ त्रुटि : 'IsMenuVisibile' संपत्ति 'ऑब्जेक्ट' 'शैल' (नाम = '') 'पर नहीं मिली है। BindingExpression: पथ = IsMenuVisibile; DataItem = 'शैल' (नाम = ''); लक्ष्य तत्व 'मेनू' है (नाम = 'uxMainMenu'); लक्षित संपत्ति 'दृश्यता' (प्रकार 'दृश्यता') है। कोई विचार? – serialhobbyist

+0

यह मानक बाध्यकारी त्रुटि है जब आपको संपत्ति नहीं मिल सकती है। इसे ठीक करने के लिए आपको अपने बाध्यकारी में IsMainMenuVisible के साथ IsMenuVisible को प्रतिस्थापित करने की आवश्यकता है। –

+0

ओह, मैं इतना बेवकूफ हूँ! मैं लॉग इन करूंगा और इसे हल कर दूंगा। धन्यवाद। और यह इंगित करने के लिए धन्यवाद कि मैं कितना मोटा हूं। :-) – serialhobbyist

1

मैं से निपटने ध्यान देने का प्रयास करता हूँ आपकी खिड़की पर PreviewKeyDown घटना। मुझे यकीन नहीं है कि Alt दबाकर इस घटना को ट्रिगर करता है या नहीं, लेकिन यदि ऐसा होता है, तो मैं bool टॉगल करूंगा जो विंडो के मुख्य मेनू की दृश्यता से जुड़ा हुआ है।

यदि PreviewKeyDown काम नहीं करता है, तो मुझे यकीन नहीं है कि और क्या प्रयास करना है। आप अपनी खिड़की पर भेजे गए वास्तविक विंडोज संदेशों को प्राप्त करने में देख सकते हैं, लेकिन यह बहुत जल्दी गन्दा हो सकता है।

+0

सुझाव के लिए धन्यवाद। मैं फिल मूल्य के पूर्वावलोकन के साथ पूर्वावलोकन के लिए जा रहा हूं क्योंकि यह आईई के करीब है लेकिन अन्यथा यह काम करने योग्य लगता है। – serialhobbyist

1

यह VK_MENU साथ GetKeyboardState उपयोग करने के लिए दोनों बाएँ और दाएँ Alt, संभाल करने के लिए आईई/Windows Explorer (विस्टा +) के व्यवहार की नकल करने के लिए आप स्टोर करने के लिए पहले से केंद्रित तत्व को ट्रैक करना होगा बेहतर होगा ध्यान केंद्रित करें, VK_MENU पर दबाएं जबकि केंद्रित तत्व आपके मुख्य मेनू में है। आप यह काम PreviewKeyUp (नीचे नहीं) पर भी करना चाहते हैं।

+0

धन्यवाद। मो में, मैं मूल बातें भी नहीं ले पा रहा हूं इसलिए मैं थोड़ी देर के लिए डब्लूएम सामान छोड़ दूंगा! – serialhobbyist

1

मैं अभी इस समस्या से खुद आया हूं। मैंने PreviewKeyDown घटना में हुकिंग करने की कोशिश की, लेकिन इसे अविश्वसनीय पाया। इसके बजाय मुझे InputManager कक्षा मिली जहां आप प्रबंधित कोड से EnterMenuMode में हुक कर सकते हैं। प्रवेश और बाहर निकलने के लिए प्रबंधक दो घटनाओं का खुलासा करता है। चाल मेनू को पतन नहीं करना है, लेकिन इसे छिपाने के लिए शून्य के कंटेनर ऊंचाई को शून्य पर सेट करें। इसे दिखाने के लिए, बस स्थानीय मान को साफ़ करें और इसकी पिछली ऊंचाई ले जाएगी।

मेरे उपयोगकर्ता TopMenu नियंत्रण से:

public TopMenu() 
{ 
    InitializeComponent(); 
    InputManager.Current.EnterMenuMode += OnEnterMenuMode; 
    InputManager.Current.LeaveMenuMode += OnLeaveMenuMode; 
    Height = 0; 
} 

private void OnLeaveMenuMode(object sender, System.EventArgs e) 
{ 
    Height = 0; 
} 

private void OnEnterMenuMode(object sender, System.EventArgs e) 
{ 
    ClearValue(HeightProperty); 
} 
संबंधित मुद्दे

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