2009-11-19 8 views
15

खींचें और विंडो स्टाइल = कोई नहीं के साथ एक WPF फॉर्म डिज़ाइन करें। तो मैं फॉर्म में ड्रैग बार नहीं देख सकता। मैं फॉर्म को विंडो स्टाइल के साथ कैसे स्थानांतरित कर सकता हूं = कोई भी संपत्ति नहीं?एक डब्ल्यूपीएफ फॉर्म

उत्तर

4

हमारे आवेदन में हमारे पास विंडो स्टाइल के साथ विंडोज़ "कोई नहीं" है, हमने खिड़की को खींचने के लिए कार्यक्षमता लागू की है, लेकिन विंडो में किसी भी बिंदु से केवल हेडर से ही। हमने हेडर के रूप में सीमा जोड़कर ऐसा किया, फिर पूरे सीमा को भरने के लिए एक थंब जोड़ना। फिर हम विंडो के लिए कोड-बैक में थंब पर ड्रैगडेल्टा विधि को संभालते हैं।

<Border 
     Name="headerBorder" 
     Width="Auto" 
     Height="50" 
     VerticalAlignment="Top" 
     CornerRadius="5,5,0,0" 
     DockPanel.Dock="Top" 
     Background="{StaticResource BackgroundBrush}" 
     BorderThickness="1,1,1,1" 
     BorderBrush="{StaticResource BorderBrush}"> 
     <Grid> 
      <Thumb 
       x:Name="headerThumb" 
       Opacity="0" 
       Background="{x:Null}" 
       Foreground="{x:Null}" 
       DragDelta="headerThumb_DragDelta"/> 
     </Grid> 
    </Border> 
तो कोड-पीछे हम है निम्न ईवेंट हैंडलर ...

private void headerThumb_DragDelta(object sender, DragDeltaEventArgs e) 
{ 
    Left = Left + e.HorizontalChange; 
    Top = Top + e.VerticalChange; 
} 

अगर यह अन्य विधि की तुलना में किसी भी बेहतर है मैं नहीं जानता, यह अभी जिस तरह हमने किया में

यह।

43

मैं एक मुख्य विंडो का उपयोग कर रहा पृष्ठों (एक नेविगेशन शैली कार्यक्रम बनाने) धारण करने के लिए, और अपने मुख्य विंडो के पीछे कोड में, मैं इस डाला ...

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 
{ 
    base.OnMouseLeftButtonDown(e); 

    // Begin dragging the window 
    this.DragMove(); 
} 

... और यह काम करता जादू की तरह। यह windowsstyle = कोई नहीं है। इस अर्थ में यह अच्छा है कि आप ऐप पर कहीं भी क्लिक कर सकते हैं और केवल शीर्ष बार तक ही सीमित होने के बजाय इसे स्थानांतरित कर सकते हैं।

2

या तो लोड समारोह पर या ग्रिड लोड समारोह पर एक deligate का उपयोग को गति प्रदान करने के अंदर खिड़कियों के अंदर माउस पर DragMove() विधि क्लिक करें

private void Grid_Loaded(object sender, RoutedEventArgs e) 
{ 
      this.MouseLeftButtonDown += delegate{DragMove();}; 
} 
+0

इसके बजाय MouseDown की आप MouseLeftButtonDown का उपयोग करना चाहिए, जैसा कि आप केवल कॉल कर सकते हैं जब प्राथमिक माउस बटन नीचे होता है तो DragMove। –

+0

@ DušanKnežević हाँ यह सच है! मैं इसे एक त्वरित चलाने के लिए एक समाधान के साथ कूद गया। –