在用户控件的内容发生更改时引发事件

时间:2014-01-30 07:05:38

标签: c# .net wpf multithreading user-interface

我有一个WPF应用程序,我有这个用户控件

查看

<Grid  Background="{StaticResource ResourceKey=baground}" >
        <DockPanel >
            <UserControl x:Name="container"   ></UserControl>
        </DockPanel>
    </Grid>

我需要添加container内容更改时引发的事件:

 private void container_LayoutUpdated_1(object sender, EventArgs e)
        {
            Thread windowThread2 = new Thread(delegate() { verifing2(); });
            windowThread2.SetApartmentState(ApartmentState.STA);
            windowThread2.IsBackground = true;
            windowThread2.Start();

            Thread windowThread3 = new Thread(delegate() { verifing3(); });
            windowThread3.SetApartmentState(ApartmentState.STA);
            windowThread3.IsBackground = true;
            windowThread3.Start();
        }

正如您所看到的,我尝试了LayoutUpdated这个事件,但我认为这不是最好的主意,因为即使container内容未更改,也会多次提升

  • 我该如何解决这个问题?

谢谢,

1 个答案:

答案 0 :(得分:3)

在WPF中,您可以设置为任何DependencyProperty举办活动,以便在Content更改

时举办活动
var desc = DependencyPropertyDescriptor.FromProperty(ContentControl.ContentProperty, typeof(UserControl));
desc.AddValueChanged(container, ContentPropertyChanged);

在这里做你需要的事情:

private void ContentPropertyChanged(object sneder, EventArgs e)
{
   //event handler
}