Элемент управления XAML не найден в выделенном фрагменте кода (Control.Template.FindName) - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь получить доступ к элементу управления XAML (элемент управления CustomMenuItem, BeverageMenuItem) в коде позади, но он возвращается как Null.

<UserControl x:Class="DinerPOS.Restaurant.Windows.UserMenuInterface"
             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:customcontrols="clr-namespace:System.Windows.WPF.Controls;assembly=CustomControls"
             xmlns:resources="clr-namespace:DinerPOS.Properties"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800">
     <Image x:Name="MenuImage" Grid.Column="1" Grid.Row="1" Cursor="/DinerPOS;component/Resources/Cursors/Hand.cur"
            Source="/DinerPOS;component/Resources/Images/Restaurant/Beverages/Beverage.png" Stretch="Fill">
            <Image.ContextMenu>
                <ContextMenu x:Name="MenuImageContextMenu" Background="White" Cursor="/DinerPOS;component/Resources/Cursors/Hand.cur" Width="175" Height="100">
                    <ContextMenu.Template>
                        <ControlTemplate x:Name="MenuImageTemplate">
                            <Grid x:Name="ContextMenuGrid" Background="{TemplateBinding Background}">
                                <customcontrols:CustomMenuItem x:Name="BeverageMenuItem" />
                            </Grid>
                        </ControlTemplate>
                    </ContextMenu.Template>
                </ContextMenu>
            </Image.ContextMenu>
        </Image>
</UserControl>

Код сзади в UserMenuInterface.xaml.cs

 CustomMenuItem BeverageMenuItem = (CustomMenuItem)MenuImageContextMenu.Template.FindName("BeverageMenuItem", MenuImage);

1 Ответ

0 голосов
/ 30 декабря 2018

Элемент управления, который вы ищете, определен внутри шаблона.Шаблон должен быть создан, прежде чем вы сможете искать элементы управления, содержащиеся в этом шаблоне.Это когда событие шаблонного элемента управления Loaded вызывается, что в вашем случае происходит при открытии контекстного меню.

Код позади UserMenuInterface:

public UserMenuInterface()
{
  InitializeComponent();
  this.MenuImageContextMenu.Loaded += FindControl;
}

private void FindControl(object sender, RoutedEventArgs e)
{
   var BeverageMenuItem = this.MenuImageContextMenu.Template.FindName("BeverageMenuItem", MenuImage) as CustomMenuItem;
}
...