Farah Uzma Ответов: 1

Как вызвать метод родительского объекта UserControl на ребенка пользовательский элемент управления в WPF


У меня есть UserControl, который находится внутри другого UserControl. Давайте назовем их ParentUC и ChildUC. Мне нужно получить ParentUC от ChildUC.Кто-нибудь может мне помочь ,как этого добиться?

Что я уже пробовал:

Кто-нибудь может прислать мне несколько ссылок для этой задачи.

1 Ответов

Рейтинг:
0

0x01AA

Вот идея/способ, как вы можете решить свой запрос на поиск родительского элемента управления.

Захват родительского элемента управления в OnVisualParentChanged:

public partial class ChildUserControl : UserControl
{
    private ParentUserControl parentUserControl = null;

    protected override void OnVisualParentChanged(DependencyObject oldParent)
    {
        // Base Class
        base.OnVisualParentChanged(oldParent);

        // Parent Control
        parentUserControl = this.Parent as ParentUserControl;
    }

    // ....
    void DoSomethingWithParent()
    {
        // >>>Don't forget to check whether parent capturing was successful<<< 
        if (parentUserControl != null)
        {
           parentUserControl.ParentMethod();   
        }
    }
}


Родительский элемент управления XAML, Примечание: дочерний элемент не должен находиться, например, в сетке для приведенного выше кода.
<usercontrol>
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication4" x:Class="MyWPFControls.ParentUserControl" 
             mc:Ignorable="d" Height="159.2" Width="209.6" Background="#FFD8BBBB">
    <local:childusercontrol horizontalalignment="Left" height="32" margin="147,117,0,0" verticalalignment="Top" width="53" xmlns:local="#unknown">

Background="#FFB28484"/>
</local:childusercontrol></usercontrol>

Надеюсь, это поможет.