C# 在WinForms窗口';s位置更改
我有一个用WPF制作的自定义控件,带有一个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
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);