如何判断WPF窗口中何时发生可见更改
本文关键字:何时发 窗口 何判断 判断 WPF | 更新日期: 2023-09-27 18:00:00
我正在捕获包含任意内容(控件等)的WPF窗口的可视化表示。每次窗口发生视觉变化时,我都需要捕捉窗口的图片。
当窗口在视觉上发生变化时(大小变化、内容变化……用户用眼睛能看到的任何东西),我该怎么办?我不在乎其他的变化。
我发现了一些与知道渲染何时完成有关的问题,但我不确定这是完全相同的事情,因为我更关心的是窗口作为一个区域,并且如果视觉没有改变,我不担心渲染会发生。
您可以使用Window.LayoutUpdated事件,它应该能满足您的需要
考虑以下内容:
<Window x:Class="WpfApplication11.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"
LayoutUpdated="MainWindow_OnLayoutUpdated">
<StackPanel>
<Label>Last event:</Label>
<TextBox x:Name="LastEvent"/>
<Label x:Name="Updateable">Updateable</Label>
<UniformGrid x:Name="Controls"/>
</StackPanel>
</Window>
以及背后的代码:
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
button_Click(null, null);
var timer = new Timer(1000);
timer.Elapsed += timer_Elapsed;
timer.Start();
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Dispatcher.Invoke(new Action(() =>
{
var rand = new Random();
Updateable.Background =
new SolidColorBrush(Color.FromRgb((byte) rand.Next(byte.MaxValue),
(byte) rand.Next(byte.MaxValue),
(byte) rand.Next(byte.MaxValue)));
}));
}
private void button_Click(object sender, RoutedEventArgs e)
{
var button = new Button {Content = "Click Me!"};
button.Click += button_Click;
Controls.Children.Add(button);
}
private void MainWindow_OnLayoutUpdated(object sender, EventArgs eventArgs)
{
LastEvent.Text = DateTime.Now.ToLongTimeString();
}
}