13

名前が xaml コードで設定されている場合、その名前で WPF コントロールの親を見つける方法はありますか?

4

3 に答える 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 に答える