假设我的应用程序中有以下课程。
主窗口.xaml.cs
public partial class MainWindow : Window
{
public SolidColorBrush Brush { get; set; }
public MainWindow()
{
InitializeComponent();
Brush = new SolidColorBrush(Colors.AliceBlue);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window1 window = new Window1();
window.DataContext = this;
window.ShowDialog();
Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, (Action)delegate
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
});
}
主窗口.xaml
<Window x:Class="WpfApplication8.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" >
<Button Click="Button_Click">Do It</Button>
</Window>
Window1.xaml.cs
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
~Window1()
{
Debug.WriteLine("Window1 Finalized");
}
}
Window1.xaml
<Window x:Class="WpfApplication8.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"
Background="{Binding Brush}">
<Grid>
</Grid>
</Window>
当我启动应用程序时,单击Do It
按钮并关闭打开的窗口 -Debug.WriteLine("Window1 Finalized");
不执行。这意味着 Window1 对象仍然在内存中并且没有被 GC。Window1.xaml
但是,如果我从- “Window1 Finalized”字符串中删除画笔绑定,则会出现在输出中。这意味着 Window1 对象被 GCed。
绑定如何将对象保留在内存中?是错误还是绑定的实现方式?
编辑 1
如果我绑定 Foreground 属性而不是 Background 属性,则 Window1 已完成。所以看起来它不是依赖系统效果,而是背景属性实现的效果。