子ウィンドウを表示するカスタム コントロールで、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 は、これが呼び出されて初めてゼロになります。また、次回の高さは、割り当てられた新しいコンテンツではなく、以前のコンテンツのものです。
コンテンツプレゼンターの実際の高さを取得するには? 何かイベントはありますか?