繁体   English   中英

启动时避免 SizeChanged 事件

[英]Avoid SizeChanged event on startup

我有一个 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 方法还使用了一些尚未在启动时创建的对象,这会导致错误。 如何避免这种情况,并且仅在运行程序时实际更改大小时才触发此事件?

您拥有 Window 的 IsLoaded 属性。

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

您可以在重新调整大小时检查项目是否为空,这样您就可以避免这是一个问题,这可以使用空合并空条件运算符来完成。 例如,如果您在启动时使用 textBox 的值但尚未实例化,则可以使用它

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

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM