2012-03-07 17 views
6

के साथ बटन दृश्यता समायोजित करना मैं माउस को अपने स्थान पर रखता हूं, जब माउस क्षेत्र छोड़ देता है, तो बटन को छिपाने के लिए वापस जाना चाहिए। बटन के लिए मेरा कोड यहाँ है।माउसओवर

<StackPanel Name="ButtonOptions" Orientation="Horizontal" DockPanel.Dock="Bottom" Background="DarkBlue" Height="50" Width="auto"> 
    <!--<StackPanel.Resources> 
     <Style TargetType="Button"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </StackPanel.Resources>--> 
    <Button Name="LoginButton" FontSize="12" Click="LoginButton_Click" Content="Log In" Width="100" Height="31" Margin="50,0,0,0" 
      FontFamily="Arial" Visibility="Visible" IsEnabled="True" MouseEnter="LoginButton_MouseEnter" /> 
    <Button Name="OptionsButton" Content="Options" Width="100" Height="31" Margin="20,0,0,0" FontFamily="Arial" 
      FontSize="12" Click="OptionsButton_Click" Visibility="Hidden" IsEnabled="False"/> 
</StackPanel> 

रिसोसेस अनुभाग पर टिप्पणी की गई है क्योंकि मैंने कोशिश की और यह काम नहीं कर रहा था। बटन में मेरी लॉग .. निम्नलिखित eventhandler दी जाती

LoginButton.MouseEnter += new MouseEventHandler(LoginButton_MouseEnter); 

विधि है कि संभालती है यह है ..

private void LoginButton_MouseEnter(object sender, MouseEventArgs e) 
{ 
    MessageBox.Show("Made in the login button listener for mouseOver"); 

    LoginButton.Visibility = Visibility.Visible; 
} 

जब मैं अपने अनुप्रयोग चलाने, कुछ नहीं होता जब मैं स्थान ऊपर ठहराया जहां बटन होना चाहिए। हालांकि, अगर मैंने शुरुआत में दृश्यमान होने के लिए लॉग इन बटन की दृश्यता सेट की है, तो मैं बटन देख सकता हूं, और जब मैं उस पर क्लिक करता हूं, तो उपयोगकर्ता लॉग इन करने के लिए तर्क विधि में मेरा लॉग ओवरराइड होता है, और मुझे संदेश बॉक्स में संकेत दिया जाता है "माउसओवर के लिए लॉगिन बटन श्रोता में बनाया गया" के लिए MouseEventListener विधि। इतना ही नहीं, लेकिन मुझे इनमें से दो संदेश प्राप्त होते हैं (जैसे ही मैं पहली बार "ठीक" पर क्लिक करता हूं, यह तुरंत फिर से पॉप अप करता है) मुझे यकीन नहीं है कि यह क्यों काम नहीं करता है, और न ही मेरी क्लिक इवेंट विधि को अनदेखा क्यों किया जाता है और अब माउसइवेंट विधि होती है।

किसी भी विचार या मदद की सराहना की जाएगी, धन्यवाद!

+2

घटनाक्रम आग नहीं है। – 0x4f3759df

+2

माउस ओवर का निदान करने के लिए पॉप-अप का उपयोग न करें। आपको दो पॉप-अप मिल रहे हैं क्योंकि जब आप इसे बंद करने के लिए संवाद पर माउस करते हैं, तो अब आप उस तत्व पर ध्यान नहीं देते हैं जिसने इसे ट्रिगर किया है! जब संवाद बंद हो जाता है, तो यह फिर से घटना पर माउस को आग लगा देगा। –

+0

@iterationx: मुझे लगता है कि यह सच है, लेकिन यदि आप IsHitTestVisible प्राप्त करते हैं तो आप इसे ओवरराइड करने में सक्षम हो सकते हैं। –

उत्तर

26

ऑफ-विषय: सबसे पहले, आइटम आपके माउस के नीचे "नीचे" दिखाई देते हैं, वास्तव में एक खराब डिज़ाइन है और मैं इसे बदलने पर सलाह दूंगा।

विषय-वस्तु: जैसा कि अन्य लोगों ने पहले से ही टिप्पणी अनुभाग में उल्लेख किया है, जब भी कोई नियंत्रण छुपाया जाता है या संकुचित हो जाता है, तो यह किसी भी इनपुट को संसाधित करना बंद कर देगा, इसलिए आप किसी भी ट्रिगर को ट्रिगर नहीं करेंगे।

आप जिस व्यवहार को खोजते हैं उसे लागू करने के लिए ओपेसिटी प्रॉपर्टी का उपयोग कर सकते हैं और इसके अलावा "माउसइंटर" और "माउसलेव" पर इवेंट ट्रिगर का उपयोग करके एक अच्छी एनीमेशन डालने में सक्षम हो सकते हैं। अब

<Style x:Key="FadeOutButton" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <EventTrigger RoutedEvent="Control.MouseEnter"> 
      <BeginStoryboard> 
       <Storyboard > 
        <DoubleAnimation Duration="0:0:1" To="1" Storyboard.TargetProperty="Opacity"/> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
     <EventTrigger RoutedEvent="Control.MouseLeave"> 
      <BeginStoryboard> 
       <Storyboard > 
        <DoubleAnimation Duration="0:0:1" To="0.2" Storyboard.TargetProperty="Opacity"/> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Style.Triggers> 
</Style> 

, मैं दृढ़ता से बटन दिखाई रखने के लिए सुझाव है कि यहां तक ​​कि जब माउस (अस्पष्टता = ऊपर मेरी उदाहरण में 0.2) नहीं है होगा मेरा पहला विचार पर वापस, और के साथ खेलते हैं: यहां बताया मुझे लगता है कि शैली लिखते थे है एनीमेशन समय। यदि यह कोई विकल्प नहीं है, तो आप हमेशा एनीमेशन अवधि को 0: 0: 0 और अस्पष्टता मान टीआई 0 पर सेट कर सकते हैं और आपको दृश्यता (कम से कम दृष्टि से) के समान परिणाम मिलेंगे।

बाद में संपादित करें: आप इस तरह अपने बटन पर शैली लागू करना चाहिए: जब एक बटन छिपा या संकुचित हो जाता है

<Button Content="my button" Style="{StaticResource FadeOutButton}" Opacity="0.2"/> 
+0

+1। –

+0

@ मैट बर्लैंड और एलेक्सडेना - मुझे एहसास है कि यह कुछ करने का सबसे अच्छा तरीका नहीं है, लेकिन यह ऐप एक टीवी पर जा रहा है जो डेटाबेस से डेटा प्रदर्शित करेगा, प्रबंधक अन्य विंडो के माध्यम से स्क्रीन पर प्रदर्शित होने वाले समायोजन और समायोजन कर सकते हैं, बटन से खोला गया। वे छिपे हुए हैं क्योंकि टीवी पर इन बटनों को दिखाने के लिए बदसूरत होगा, और ऐप का उपयोग करते समय प्रबंधकों को उनके स्थान के बारे में पता चल जाएगा। – Ryan

+0

@AlexDrenea - मैंने अपने xaml के शीर्ष पर एक विंडो संसाधन के रूप में अपना कोड जोड़ने की कोशिश की, लेकिन कुछ भी नहीं हुआ। क्या मुझे उस संसाधन को शामिल करने की आवश्यकता है जहां मैं अपना बटन परिभाषित करता हूं, या खिड़की के सभी बटनों के लिए शैली सार्वभौमिक है? या मेरे माउसइंटर और माउसलेव घटनाएं सिर्फ इस शैली को ओवरराइड कर सकती हैं? – Ryan

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