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>
Надеюсь, это поможет.