如何在WPF窗口中发生可见更改时如何判断?

时间:2014-04-24 00:03:46

标签: c# wpf

我正在捕获包含任意内容(控件等)的WPF窗口的可视化表示。每次窗口视觉上发生变化时,我都需要捕捉窗口的图片。

我可以做什么来判断窗口何时在视觉上发生了变化(尺寸发生了变化,内容发生了变化......用户可以用眼睛看到的任何内容)?我不在乎任何其他变化。

我发现了一些与了解渲染何时完成相关的问题,但我不确定这是完全相同的事情,因为我更关心Window作为一个区域,而我&# 39;如果没有任何视觉变化,我不关心渲染的发生。

1 个答案:

答案 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();
    }
}