2010-10-28 6 views
8

मेरे पास एक साधारण WPF पॉपअप है जो उपयोगकर्ता दिखा रहा है जब उपयोगकर्ता बटन पर क्लिक करता है।मेरी पॉपअप कुछ मशीनों पर प्लेसमेंट संपत्ति के विपरीत क्यों दिख रही है?

<Button 
    x:Name="aButton" 
    Content="Up/Down" 
    Width="75" 
    Height="30" 
    Click="aButton_Click" 
/> 
<Popup 
    PlacementTarget="{Binding ElementName=aButton}" 
    Placement="Right" 
    VerticalOffset="-31" 
    StaysOpen="False" 
    AllowsTransparency="True" 
> 
    <StackPanel> 
     <Button Width="45" Height="45" Margin="2,0,2,2" Content="+"/> 
     <Button Width="45" Height="45" Margin="2,0,2,0" Content="-"/> 
    </StackPanel> 
</Popup> 

क्या बेहद अजीब है ... कि इस कोड को अलग ढंग से क्या मशीन के आधार पर काम करता है उस पर चलाता है।

मैं इस कोड को अपने मुख्य डेस्कटॉप पर चलाता हूं और सब ठीक काम करता है ... और जैसा भी होना चाहिए। मैं इसे अपने पीडीसी 0 9 नेटबुक पर चलाता हूं ... और पॉपअप विपरीत दिखाता है (दाईं तरफ बाईं तरफ के रूप में मैंने प्लेसमेंट संपत्ति के साथ कहा था)।

यह क्यों है? और मैं इसके बारे में क्या कर सकता हूं?

उत्तर

11

मुझे Google के माध्यम से कुछ भी नहीं मिला ... लेकिन WPF forum में एक भाग्यशाली खोज, जल्दी से यह post मिला। स्वयं को ध्यान दें: यदि Google कुछ भी नहीं ढूंढ पा रहा है तो WPF मंचों को खोजना न भूलें।

उत्तर यह है कि मेरी पीडीसी 0 9 नेटबुक दिल में एक टैबलेट पीसी है, और जाहिर है, माइक्रोसॉफ्ट ने सोचा था कि दाएं हाथ वाले लोगों के लिए कॉन्फ़िगर किए गए टैबलेट पीसी पर प्लेसमेंट प्रॉपर्टी के विपरीत पॉपअप दिखाने का अच्छा विचार था ... जैसे पॉपअप उपयोगकर्ता के हाथ में नहीं दिखता है।

समाधान कस्टम पॉपअप प्लेसमेंट पर वापस जाना है ... यदि आप यह व्यवहार नहीं चाहते हैं।

मुझे इस समस्या के आसपास किसी अन्य तरीके के बारे में सुनना अच्छा लगेगा।

+1

ग्रेट ढूंढें, धन्यवाद! – cunningdave

+0

और बीटीडब्ल्यू, मैं हमेशा यह पता लगाने के लिए एसओ खोजता हूं कि उचित मंचों पर अन्य लोगों ने क्या पाया है। ;) – cunningdave

+1

आपकी मदद करने में खुशी हुई ... इस तरह की चीजें, मुझे पागल ड्राइव करें। – cplotts

0

मैंने वांछित प्लेसमेंट लक्ष्य के रूप में एक ही ग्रिड कॉल/पंक्ति में सीमा जोड़कर इस समस्या को ठीक किया। फिर इसे प्लेसमेंट लक्ष्य के रूप में सेट करें। इस सीमा की चौड़ाई को पॉपअप सामग्री पर बाध्य करके यह स्वचालित रूप से इसकी चौड़ाई समायोजित करेगा इसलिए संरेखण (बाएं या दाएं) अप्रासंगिक है। यदि आप अभी भी संरेखण को नियंत्रित करना चाहते हैं, तो आप प्लेसमेंट लक्ष्य सीमा को संरेखित करके ऐसा कर सकते हैं। आशा है कि समझ में आता है, यदि नहीं, तो यहां एक त्वरित उदाहरण है।

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <Popup x:Name="StartMenuPopup" Placement="Top" PlacementTarget="{Binding ElementName=PopupTarget}" > 
     <Border x:Name="PopupBorder"> 
     </Border> 
    </Popup> 

    <Border x:Name="PopupTarget" Grid.Row="1" Width="{Binding ActualWidth, Mode=OneWay, ElementName=PopupBorder}" 
     BorderThickness="0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 

    <startmenu:TaskBar Grid.Row="1"> 
     <startmenu:TaskBar.StartButton> 
      <startmenu:ToggleMenu Width="36" x:Name="StartButton" 
           ImageData="{Binding StartButtonImageData}" 
           AssociatedPopup="{Binding ElementName=StartMenuPopup}" 
           IsOpen="{Binding StartMenuOpen, Mode=TwoWay}"/> 
     </startmenu:TaskBar.StartButton> 
    </startmenu:TaskBar> 
</Grid> 

पॉपअप PlacementTarget PopupTarget सीमा को बांधता है, और PopupTarget बॉर्डर चौड़ाई वापस PopupBorder तत्व को बांधता है। यह PopupTarget सीमा को समान चौड़ाई बनाता है क्योंकि पॉपअप इसलिए संरेखण समस्या को अस्वीकार करता है।

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