2012-04-24 12 views
8

पर क्लिक करते समय एप्लिकेशन को ध्यान केंद्रित करने का कारण नहीं बना रहा है मेरे पास एक नियंत्रण है जो इसके अंदर कुछ WPF नियंत्रणों के साथ पॉपअप का उपयोग कर रहा है, और StaysOpen = "True"। समस्या तब होती है जब एप्लिकेशन पर फोकस नहीं होता है, तो पॉपअप पर क्लिक करते समय, एप्लिकेशन को फोकस नहीं मिलता है। मैंने थोड़ा सा शोध किया है, और ऐसा लगता है कि यह इस तथ्य के कारण हो सकता है कि मेनू के लिए पॉपअप का उपयोग किया जाना चाहिए, इसलिए उनके पास सभी उचित विंडोज़ संदेश हैंडलर नहीं हैं। यहाँ समस्या demoing के लिए एक barebones नमूना है:डब्ल्यूपीएफ पॉपअप

<Window x:Class="TestWindowPopupBehavior.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:TestWindowPopupBehavior="clr-namespace:TestWindowPopupBehavior" Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Popup StaysOpen="True" IsOpen="True" Placement="Center"> 
     <ListBox> 
      <TextBlock>123</TextBlock> 
      <TextBlock>123</TextBlock> 
      <TextBlock>123</TextBlock> 
      <TextBlock>123</TextBlock> 
      <TextBlock>123</TextBlock> 
      <TextBlock>123</TextBlock> 
     </ListBox> 
    </Popup> 

</Grid> 
</Window> 
  1. आवेदन चलाएँ।
  2. सूची बॉक्स के साथ बातचीत करें, जो ठीक काम करना चाहिए।
  3. दूसरे एप्लिकेशन पर स्विच करें।
  4. एप्लिकेशन सक्रिय नहीं होने पर सूची बॉक्स पर क्लिक करें। कुछ भी नहीं होता
  5. सूची बॉक्स के बाहर के आवेदन पर क्लिक करें।
  6. सूची बॉक्स पर क्लिक करें। यह अब काम कर रहा है।

चरण 4 में होने वाली मुझे उम्मीद है कि एप्लिकेशन फोकस प्राप्त करेगा, और सूचीबॉक्स नई वस्तु का चयन करेगा।

क्या इस समस्या के लिए कोई कामकाज है, या कुछ स्पष्ट है जो मुझे याद आ रही है? मैं पूरी तरह से खिड़कियों के साथ पूरे पॉपअप कोड को फिर से लिखना चाहता हूं, और हमारे व्यवहार को फिर से कार्यान्वित कर रहा हूं, लेकिन ऐसा लगता है कि इस तरह की एक छोटी सी समस्या को ठीक करने के लिए वास्तव में जटिल लगता है।

उत्तर

4

आप MouseLeftButtonDown घटना को संभालने के हैं, तो आप Window.Activate() विधि कॉल कर सकते हैं। लेकिन आपको इसे प्रत्येक तत्व के लिए लिखना चाहिए - Popup और सभी TextBlock एस के लिए।

आप जिस समस्या से मुलाकात कर सकते हैं वह यह है कि विंडोज़ पर आप माउस बटन स्वैप कर सकते हैं, जहां बाएं सही हो गए थे और इसके विपरीत (लेकिन मुझे नहीं पता कि यह कैसे काम करता है), इसलिए, आपको MouseRightButtonDown ईवेंट को संभालना होगा।

+3

यह पूर्वावलोकन का उपयोग करने के लिए पर्याप्त होना चाहिए ... पॉप अप पर इसे फंसाने के लिए माउस ईवेंट इसकी सामग्री के लिए अधिक हैंडलर जोड़ने के बिना। – Paul

+0

यह मेरे लिए पूर्वावलोकन XXX का उपयोग कर काम किया। – FryGuy

+0

क्या आप पूर्वावलोकन चीज़ के बारे में अधिक विशिष्ट हो सकते हैं? मुझे एक ही समस्या है। –

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