我正在捕获包含任意内容(控件等)的WPF窗口的可视化表示。每次窗口视觉上发生变化时,我都需要捕捉窗口的图片。
我可以做什么来判断窗口何时在视觉上发生了变化(尺寸发生了变化,内容发生了变化......用户可以用眼睛看到的任何内容)?我不在乎任何其他变化。
我发现了一些与了解渲染何时完成相关的问题,但我不确定这是完全相同的事情,因为我更关心Window作为一个区域,而我&# 39;如果没有任何视觉变化,我不关心渲染的发生。
答案 0 :(得分:0)
您可以使用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();
}
}