2016-07-18 17 views
0

Ich versuche Ausführen von Code in einem SizeChangedEventHandler aber die folgende funktioniert nicht zu erhöhen:Wie programmSizeChanged-Ereignis

[TestMethod] 
public void TestSizeChanged() 
{ 
    var panel = new System.Windows.Controls.StackPanel(); 

    bool handled = false; 
    panel.SizeChanged += (o, e) => 
    { 
     handled = true; // how to get this to be executed 
    }; 

    panel.Width = 100; // naive attempt to change size! 

    Assert.IsTrue(handled); 
} 

ich ursprünglich versucht, die Raise Methode zu verwenden, aber ich war nicht in der Lage gewesen, es zu liefern mit dem richtigen xxxEventArgs Typ aufgrund der Konstruktor Argumente nicht zu wissen, und das Objekt-Browser ist nicht zu helfen:

panel.RaiseEvent(new System.Windows.SizeChangedEventArgs()) // does not compile 

Offensichtlich ist die obige Test keinen Zweck dient, aber ich bin nach korrekter Weise das Ereignis immer Feuer in eine Einheit-getestete Umgebung.

+2

Warum fügen Sie dies als Komponententest hinzu? Testen Sie, um zu sehen, was das Fenster ändert, oder testen Sie die Logik des Codes, der beim Ändern der Größe aufgerufen wird? –

+0

@BenSteele ja, letzteres. Ich könnte Sachen im Code umher bewegen, aber hartnäckig versucht haben, zu prüfen, wie ist – mungflesh

Antwort

2

Es ist sehr seltsam, dass das SizeChanged-Ereignis nicht mit Ihrem Code ausgelöst wird, scheint es korrekt zu sein. Vielleicht ist das StackPanel in der visuellen Struktur nicht vorhanden, da es nicht wirklich auf dem Bildschirm angezeigt wird, sodass das Ereignis nie ausgelöst wird. Versuchen Sie, ein echtes Fenster mit einem StackPanel auf dem Bildschirm anzuzeigen, und ändern Sie programmatisch seine Breite oder Höhe.

[TestMethod] 
    public void TestSizeChanged() 
    { 
     Window wnd = new Window(); 
     wnd.Content = new System.Windows.Controls.StackPanel(); 

     bool handled = false; 
     wnd.SizeChanged += (o, e) => 
     { 
      handled = true; // how to get this to be executed 
     }; 

     wnd.Show(); 
     wnd.Width = 100; // naive attempt to change size! 

     Assert.IsTrue(handled); 

    } 

Sie können nicht die Raise Methode verwenden, weil Sizechanged kein RoutedEvent ist.

+0

Wenn Sie diese Route hinuntergehen, denke ich, dass Sie wnd.ActualWidth eher als die Breite wie angegeben ändern müssen: https: //msdn.microsoft .com/de-de/library/system.windows.frameworkelement.sizeswitched (v = vs.110) .aspx –

+1

Nein, ActualWidth ist eine schreibgeschützte Eigenschaft. Sie können nur den Width-Wert ändern, aber um das SizeChanged-Ereignis ausgelöst zu bekommen, müssen Sie das Fenster auf dem Bildschirm anzeigen –

+0

Ich habe meinen Code oben getestet und ich bestätige, dass das SizeChanged-Ereignis ausgelöst wird. –