1

ControlTemplateコントロールを含む、WPF で作成されたカスタム コントロールがありますPopup

<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}">

カスタム コントロールは、次のコードによって WinForms アプリでホストされます。

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

ウィンドウの位置が変わったときにポップアップ自体の位置を変更したい。ここで、ウィンドウ参照を取得して彼のイベントに登録することを提案するいくつかの回答を見ましたLocationChangedが、winForms ウィンドウでホストされているため、うまくいきません。

どんな提案も役に立ちます:)

4

1 に答える 1

2

?:LocationChangedを介してイベントに接続することはできません。ElementHost

TitleBarクラスで:

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);
于 2013-10-24T10:22:39.107 に答える