从上下文菜单控件模板 C# 访问子项

Access children from contextmenu control template c#

我正在尝试从控件的上下文菜单访问控件 template.My xaml 是:

 <Button x:Name="button1" ContextMenuService.Placement="top" Content="Button" HorizontalAlignment="Left" Margin="2,543,0,0" VerticalAlignment="Top" Width="75" Grid.ColumnSpan="2">
        <Button.ContextMenu>
            <ContextMenu x:Name="btconmn" >
                <ContextMenu.Template>
                    <ControlTemplate>
                        <Grid x:Name="newgrid"  Width="183" Height="190">
                            <Rectangle Fill="#FF263349" x:Name="newfolder" HorizontalAlignment="Left" VerticalAlignment="Top" Width="179" Height="32" Margin="2,1,0,0"/>
                        </Grid>
                     </ControlTemplate>
                </ContextMenu.Template>
            </ContextMenu>
        </Button.ContextMenu>
    </Button>   

我在这里尝试访问 newfolder 矩形。到目前为止我试过了:

 public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
    var template = btconmn.Template;
    var myControl = (Rectangle)template.FindName("newfolder", btconmn);
 }

哪个returns空引用exception.Any帮助?

WPF 控件通常在需要时才会加载,因此在您的情况下,您可以访问矩形的最早点是 按钮的上下文菜单加载后(这发生在它第一次打开之前):

将此添加到您的 XAML:

<ContextMenu x:Name="btconmn" Loaded="Btconmn_OnLoaded">

这在你后面的代码中:

private void Btconmn_OnLoaded(object sender, RoutedEventArgs e)
{
    var template = btconmn.Template;
    var myControl = (Rectangle)template.FindName("newfolder", btconmn);
}