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

Lam*_*fif 3 .net c# wpf user-interface multithreading

我有一个 WPF 应用程序,其中有此用户控件

看法

<Grid  Background="{StaticResource ResourceKey=baground}" >
        <DockPanel >
            <UserControl x:Name="container"   ></UserControl>
        </DockPanel>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

我需要添加一个在内容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();
        }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我尝试了这个活动LayoutUpdated,但我认为这不是最好的主意,因为它被提出了很多次,即使container内容没有改变。

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

谢谢,

dko*_*ozl 7

DependencyProperty在 WPF 中,如果您想在Content更改时引发事件,您可以设置为任何事件引发事件

var desc = DependencyPropertyDescriptor.FromProperty(ContentControl.ContentProperty, typeof(UserControl));
desc.AddValueChanged(container, ContentPropertyChanged);
Run Code Online (Sandbox Code Playgroud)

并在这里做你需要做的事情:

private void ContentPropertyChanged(object sneder, EventArgs e)
{
   //event handler
}
Run Code Online (Sandbox Code Playgroud)