名前が xaml コードで設定されている場合、その名前で WPF コントロールの親を見つける方法はありますか?
質問する
20065 次
3 に答える
10
これを試して、
element = VisualTreeHelper.GetParent(element) as UIElement;
ここで、要素は子供です-あなたが取得する必要があるのはその親です。
于 2013-03-04T10:03:40.200 に答える
5
実際、私はVisualTreeHelperを使用して名前と型で親コントロールを再帰的に探すことでこれを行うことができました。
/// <summary>
/// Recursively finds the specified named parent in a control hierarchy
/// </summary>
/// <typeparam name="T">The type of the targeted Find</typeparam>
/// <param name="child">The child control to start with</param>
/// <param name="parentName">The name of the parent to find</param>
/// <returns></returns>
private static T FindParent<T>(DependencyObject child, string parentName)
where T : DependencyObject
{
if (child == null) return null;
T foundParent = null;
var currentParent = VisualTreeHelper.GetParent(child);
do
{
var frameworkElement = currentParent as FrameworkElement;
if(frameworkElement.Name == parentName && frameworkElement is T)
{
foundParent = (T) currentParent;
break;
}
currentParent = VisualTreeHelper.GetParent(currentParent);
} while (currentParent != null);
return foundParent;
}
于 2019-01-11T18:12:46.557 に答える
2
コードでは、 VisualTreeHelperを使用して、コントロールのビジュアル ツリーをウォークスルーできます。通常どおり分離コードからコントロールをその名前で識別できます。
XAMLから直接使用したい場合は、カスタムの「値コンバーター」を実装してみます。これを実装して、要件を満たす親コントロールを見つけることができます。たとえば、特定のタイプがあります。
値コンバーターを使用したくない場合は、「実際の」変換操作ではないため、検索述語である「入力コントロール」の依存関係プロパティを提供する依存オブジェクトとして「ParentSearcher」クラスを実装できます。および出力コントロールを作成し、これを XAML で使用します。
于 2013-03-04T10:05:18.310 に答える