snipt

Ctrl+h for KB shortcuts

C#

Find Parent Control by Type

    /// <summary>
    /// Finds a parent of a given control/item on the visual tree.
    /// </summary>
    /// <typeparam name="T">Type of Parent</typeparam>
    /// <param name="child">Child whose parent is queried</param>
    /// <returns>Returns the first parent item that matched the type (T), if no match found then it will return null</returns>
    public static T TryFindParent<T>(DependencyObject child)
    where T : DependencyObject
    {
        DependencyObject parentObject = VisualTreeHelper.GetParent(child);
        if (parentObject == null) return null;
        T parent = parentObject as T;
        if (parent != null)
            return parent;
        else
            return TryFindParent<T>(parentObject);
    }
https://snippets.siftie.com/embed/d9e6c636674b539acbd3517961e66235/
/raw/d9e6c636674b539acbd3517961e66235/
d9e6c636674b539acbd3517961e66235
csharp
C#
17
2019-03-20T01:28:48
True
False
False
Oct 23, 2013 at 05:54 AM
/api/public/snipt/89535/
find-parent-control-by-type
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10">10</a> <a href="#L-11">11</a> <a href="#L-12">12</a> <a href="#L-13">13</a> <a href="#L-14">14</a> <a href="#L-15">15</a> <a href="#L-16">16</a> <a href="#L-17">17</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a> <span class="c1">/// &lt;summary&gt;</span> </span><span id="L-2"><a name="L-2"></a> <span class="c1">/// Finds a parent of a given control/item on the visual tree.</span> </span><span id="L-3"><a name="L-3"></a> <span class="c1">/// &lt;/summary&gt;</span> </span><span id="L-4"><a name="L-4"></a> <span class="c1">/// &lt;typeparam name=&quot;T&quot;&gt;Type of Parent&lt;/typeparam&gt;</span> </span><span id="L-5"><a name="L-5"></a> <span class="c1">/// &lt;param name=&quot;child&quot;&gt;Child whose parent is queried&lt;/param&gt;</span> </span><span id="L-6"><a name="L-6"></a> <span class="c1">/// &lt;returns&gt;Returns the first parent item that matched the type (T), if no match found then it will return null&lt;/returns&gt;</span> </span><span id="L-7"><a name="L-7"></a> <span class="k">public</span> <span class="k">static</span> <span class="n">T</span> <span class="n">TryFindParent</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">DependencyObject</span> <span class="n">child</span><span class="p">)</span> </span><span id="L-8"><a name="L-8"></a> <span class="k">where</span> <span class="n">T</span> <span class="p">:</span> <span class="n">DependencyObject</span> </span><span id="L-9"><a name="L-9"></a> <span class="p">{</span> </span><span id="L-10"><a name="L-10"></a> <span class="n">DependencyObject</span> <span class="n">parentObject</span> <span class="p">=</span> <span class="n">VisualTreeHelper</span><span class="p">.</span><span class="n">GetParent</span><span class="p">(</span><span class="n">child</span><span class="p">);</span> </span><span id="L-11"><a name="L-11"></a> <span class="k">if</span> <span class="p">(</span><span class="n">parentObject</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span> <span class="k">return</span> <span class="k">null</span><span class="p">;</span> </span><span id="L-12"><a name="L-12"></a> <span class="n">T</span> <span class="n">parent</span> <span class="p">=</span> <span class="n">parentObject</span> <span class="k">as</span> <span class="n">T</span><span class="p">;</span> </span><span id="L-13"><a name="L-13"></a> <span class="k">if</span> <span class="p">(</span><span class="n">parent</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span> </span><span id="L-14"><a name="L-14"></a> <span class="k">return</span> <span class="n">parent</span><span class="p">;</span> </span><span id="L-15"><a name="L-15"></a> <span class="k">else</span> </span><span id="L-16"><a name="L-16"></a> <span class="k">return</span> <span class="n">TryFindParent</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">parentObject</span><span class="p">);</span> </span><span id="L-17"><a name="L-17"></a> <span class="p">}</span> </span></pre></div> </td></tr></table>
WPF