Silverlightの行動OnAttachedメソッドが返すのはnullでAssociatedObject.FindName
-
23-09-2019 - |
質問
私が含まれている「ドラッグハンドル」要素(全体ではなく要素であるドラッグ可能な)で要素をドラッグ可能にするためのSilverlightの振る舞いを作ってるんです。ウィンドウのタイトルバーのようなものだと考えています。
私は呼び出していますOnAttached方法で:AssociatedObject.FindName(DragHandle) しかし、これはNULLを返してます。
私は、AssociatedObjectのLoadedイベントを処理し、そこに私のコードを実行しようとしたが、私はまだnullが返されます。
アム私はFindName指定を行うことができるが何であるかを誤解しますか? AssociatedObjectはItemsControlに(私はドラッグ可能な要素のコレクションをしたい)です。だから、名前スコープの問題のいくつかの種類がありますか。
解決
はい、それは名前スコープの問題のように聞こえます。 XAMLの MSDNのドキュメントはのはどのようにオーバーになる名前スコープnamesopesは、テンプレートと項目のコントロールのために定義されています。あなたのItemsControl?
内のアイテムのテンプレートを使用していますあなただけの名前で、正しい要素を見つけるために、このような何かを再帰的にビジュアルツリーを歩かなければならないことがあります:
private static FrameworkElement FindChildByName(FrameworkElement parent, string name)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
FrameworkElement child = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;
if (child != null && child.Name == name)
{
return child;
}
else
{
FrameworkElement grandChild = FindChildByName(child, name);
if (grandChild != null)
{
return grandChild;
}
}
}
return null;
}
所属していません StackOverflow