C# 在WinForms窗口';s位置更改

C# 在WinForms窗口';s位置更改,c#,wpf,winforms,custom-controls,C#,Wpf,Winforms,Custom Controls,我有一个用WPF制作的自定义控件,带有一个ControlTemplate,其中包含一个弹出窗口控件: <Popup x:Name="PART_Popup" PopupAnimation="Fade" Width="{TemplateBinding Width}" AllowsTransparency="True" IsOpen="{Binding RelativeSource={RelativeSource TemplatedPar

我有一个用WPF制作的自定义控件,带有一个
ControlTemplate
,其中包含一个
弹出窗口
控件:

<Popup x:Name="PART_Popup" 
       PopupAnimation="Fade"
       Width="{TemplateBinding Width}"
       AllowsTransparency="True"
       IsOpen="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPopupOpen, Mode=OneWay}" 
       Placement="Bottom"  
       PlacementTarget="{Binding ElementName=PART_Border}">
我想在窗口位置改变时使弹出窗口重新定位。我看到一些答案建议获取窗口引用并注册到他的
LocationChanged
事件,但它对我不起作用,因为它托管在winForms窗口中


任何建议都会很有帮助:)

您是否可以通过
ElementHost
连接到
LocationChanged
事件

标题栏中
类:

public void WinFormsParent_LocationChanged(object sender, EventArgs e)
{
    // Do what you want here
}
在托管代码中:

var wpfHost = new ElementHost();
wpfHost.Dock = DockStyle.Fill;
TitleBar titleBar = new TitleBar();
LocationChanged += titleBar.WinFormsParent_LocationChanged;
wpfHost.Child = titleBar;
Controls.Add(wpfHost);

弹出窗口
实际上位于另一个自定义控件的
控件模板
中,该控件在
标题栏
中定义,但我仍然让它工作。谢谢
var wpfHost = new ElementHost();
wpfHost.Dock = DockStyle.Fill;
TitleBar titleBar = new TitleBar();
LocationChanged += titleBar.WinFormsParent_LocationChanged;
wpfHost.Child = titleBar;
Controls.Add(wpfHost);