0

子ウィンドウを表示するカスタム コントロールで、Canvas 内にあるグリッドの Left と Top を親コントロールの中央に表示するように設定したいと考えています。

public void show(object view)
{
    var presenter = Template.FindName("PART_DialogView", this) as ContentPresenter;

    if (presenter == null)
        return;

    IsDialogVisible = true; 
    presenter.Content = view;
    CenterPosition(presenter);
}

private void CenterPosition(ContentPresenter presenter)
{
    var dialog = this.GetTemplateChild("Dialog") as Grid;
    if (presenter.ActualHeight != 0.0 && presenter.ActualWidth != 0.0)
    {
        DialogLeft = (this.ActualWidth - presenter.ActualWidth) / 2.0; 
        DialogTop = (this.ActualHeight - presenter.ActualHeight) / 2.0;
    }
    Canvas.SetLeft(dialog, DialogLeft);
    Canvas.SetTop(dialog, DialogTop);
} 

しかし、ActualHeight は、これが呼び出されて初めてゼロになります。また、次回の高さは、割り当てられた新しいコンテンツではなく、以前のコンテンツのものです。

コンテンツプレゼンターの実際の高さを取得するには? 何かイベントはありますか?

4

0 に答える 0