私は、私は、このように要素名Xに到達するためにMVVMパターンのフレームに基づいて、ナビゲーションに対処する必要がプロジェクトに取り組んでいます:タイプのフレームの名前は、私たちはこのようにしたDependencyObjectにメインウィンドウを変換する必要があります。..XAMLファイル(ビュー)をDependencyObjectに変換する方法?
private static FrameworkElement GetDescendantFromName(DependencyObject parent, string name)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
if (count < 1)
{
return null;
}
for (var i = 0; i < count; i++)
{
var frameworkElement = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;
if (frameworkElement != null)
{
if (frameworkElement.Name == name)
{
return frameworkElement;
}
frameworkElement = GetDescendantFromName(frameworkElement, name);
if (frameworkElement != null)
{
return frameworkElement;
}
}
}
return null;
}
私が使用してナビゲーションサービスクラスで
...
var frame = GetDescendantFromName(Application.Current.MainWindow, "FrameName") as Frame;
frame.source = new Uri("Views/StudentView.Xaml");
この技術は唯一のメインウィンドウに制限されています。 iはdepenecyオブジェクトとしてEmployeeDetailView.Xamlの新しいinstenceを渡すと、XAMLファイルがロードされていないとGetChildrenCount()ここで0
var frame = GetDescendantFromName(EmployeeDetaiView.Xaml, "FrameName") as Frame;
を返しフレームはヌル値を有しています。 Frame要素を取得するために現在レンダリングされているEmployeeDetailViewを使用するとどうすればいいですか?
メソッドの最初のパラメータとしてビューインスタンスを渡しますか?どこに問題がありますか? – Clemens
_ "このテクニックはMainWindowのみに限定されています" _ - なぜですか?あなたはそれを何と言いますか?他のビューへの参照がある場合、その参照を同じメソッドに渡して、そのビューのビジュアルツリーを走査して目的の要素を取得するのはなぜですか?もっと重要な点は、なぜこの方法があるのでしょうか?なぜあなたは['FrameworkElement.FindName()'](https://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname(v = vs.110).aspx) ? –
あなたがしようとしていることを明確に示す良い[mcve]と、そのコードが何をしているのかについての詳細で具体的な説明と、代わりに何をしたいのかを記述してください。 –