启动时避免SizeChanged事件

时间:2016-04-19 13:39:47

标签: c# wpf events

我有一个MainWindow类,作为一些事件 - 所有这些都应该在另一个类中调用一个方法。

  public partial class MainWindow : Window
    {

        public MainWindow()
    {          
        InitializeComponent();

        getdata.MainWindow = this; 
    }


    private void button_Click(object sender, RoutedEventArgs e)
    {
        getdata go = new getdata();
        go.clear();
    }

    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        getdata go = new getdata();
        go.clear();
    }

private void comboBox2_DropDownClosed(object sender, EventArgs e) 
    {

        getdata go = new getdata();
        go.clear();

    }

    private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)         {
        getdata go = new getdata();
        go.clear();  //<-this causes exception on Startup 
    }

}

问题是MainWindow_SizeChanged事件也是在程序启动时触发的,但clear方法也使用了一些尚未在Startup中创建的对象,这会导致错误。我怎样才能避免这种情况,只有在运行程序时实际更改了大小才会触发此事件?

3 个答案:

答案 0 :(得分:1)

您具有Window的IsLoaded属性。

您可以在执行代码之前检查它。

答案 1 :(得分:0)

您可以在重新调整大小时检查项是否为空,这样可以避免出现问题,可以使用null coalescencenull conditional运算符完成此操作。例如,如果您在启动时使用textBox的值但尚未实例化,则可以使用此

string someText = tB1?.Text?
if(someText == null) return;

答案 2 :(得分:0)

SizeChanged在加载窗口之前触发事件。您可以尝试在SizeChanged事件中订阅Loaded事件,并在Unloaded中取消订阅,如下所示。

//XAML
<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Loaded="Window_Loaded" 
        Unloaded="MainWindow_OnUnloaded">

//Code Behind
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Debug.WriteLine("Size Changed Triggered");
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    SizeChanged += Window_SizeChanged;
}

private void MainWindow_OnUnloaded(object sender, RoutedEventArgs e)
{
    SizeChanged -= Window_SizeChanged;
}