私は次のコードWPF TransformToAncestorエラー
public partial class MyControl : UserControl
{
...
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
if (DataContext is MyViewModel)
{
var vm = DataContext as CameraViewModel;
var p = Parent as FrameworkElement;
while (!(p is Window))
p = p.Parent as FrameworkElement;
vm.GetTransform =() => TransformToAncestor(p);
}
}
}
を持っていると私のviewmodelで、私はコマンドハンドラのコードを持って、私のユーザーコントロールのボタンがクリックされたときに、実行されます。
public Func<GeneralTransform> GetTransform { private get; set; }
private void OnMyCommand(object parameter){
var p = GetTransform().Transform(new Point(0,0));
}
しかし、上記のコードは動作しません、GetTransform()
呼び出しは、私は上記の私のコードはすでにp
は、コントロールのウィンドウの祖先であるが、なぜ私はまだ取得することが保証されると考え
The specified Visual is not an ancestor of this Visual.
を言うようにこのエラー?
例外は 'TransformToAncestor()'で発生するため、ソースがない場合は何も特定できません。例外が話している2つの「ビジュアル」は、どのようなオブジェクトインスタンスですか? 'GetTransform()'が実行されているとき、 'p'はWindowインスタンスではありませんか? – Jai
@Jai 'UserControl_Loaded'のコードは、" this "の' Visual'がユーザコントロールで、 '指定された' 'Visual'は' Window'に到達するまで先祖列車を追跡して戻ったものです。これはデバッグでの観察と一致しているので、上記の主張を信頼します。 –
Multi-Windowアプリケーションを実行していない場合に備えて、WPFアプリケーションのメインウィンドウでもあるApplication.Current.MainWindowを試してみてください。 –