[英]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 属性。
您可以在执行代码之前检查它。
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.