2013-05-09 11 views
8

के बाद केंद्रित विंडो रखें मेरे पास एक WPF विंडो है जो आकार के साथ समय के साथ आकार बदलती है = "चौड़ाई और हाइट"। प्रारंभ में WindowStartupLocation = "CenterScreen" खिड़की सही ढंग से केंद्रित पता चलता है, और उसके बाद मैं इसके साथ recenter:SizeToContent को आसानी से

Private Sub Window_SizeChanged(ByVal sender As Object, ByVal e As System.Windows.SizeChangedEventArgs) Handles Me.SizeChanged 
    Me.Top = (SystemParameters.WorkArea.Height - e.NewSize.Height)/2 
    Me.Left = (SystemParameters.WorkArea.Width - e.NewSize.Width)/2 
End Sub 

लेकिन यह एक "कूद" के रूप में खिड़की पहले आकार दिया और बाद केंद्रित है पैदा करता है।

क्या इसे आसानी से करने का कोई तरीका है?

उत्तर

0

मुझे स्थापित करने के बजाय मुझे। टीओपी और मी। लेफ्ट सीधे आप अनुवाद परिवर्तन को एनिमेट करने के लिए अनुवाद ट्रान्सफॉर्म का उपयोग कर सकते हैं।

public static void MoveTo(this UIElement target, double newX, double newY) 
{ 
    var top = Canvas.GetTop(target); 
    var left = Canvas.GetLeft(target); 
    TranslateTransform trans = new TranslateTransform(); 
    target.RenderTransform = trans; 
    DoubleAnimation anim1 = new DoubleAnimation(top, newY - top, TimeSpan.FromSeconds(10)); 
    DoubleAnimation anim2 = new DoubleAnimation(left, newX - left, TimeSpan.FromSeconds(10)); 
    trans.BeginAnimation(TranslateTransform.XProperty,anim1); 
    trans.BeginAnimation(TranslateTransform.YProperty,anim2); 
} 

कोड स्रोत: WPF. Easiest way to move Image to (X,Y) programmatically?

+0

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

2

यह मेरे लिए काम किया:

protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) 
{ 
    base.OnRenderSizeChanged(sizeInfo); 

    //Calculate half of the offset to move the form 

    if (sizeInfo.HeightChanged) 
     this.Top += (sizeInfo.PreviousSize.Height - sizeInfo.NewSize.Height)/2; 

    if (sizeInfo.WidthChanged) 
     this.Left += (sizeInfo.PreviousSize.Width - sizeInfo.NewSize.Width)/2; 
} 
संबंधित मुद्दे