Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF Template.FindName返回值始终为null_C#_Wpf_Xaml_Findname - Fatal编程技术网

C# WPF Template.FindName返回值始终为null

C# WPF Template.FindName返回值始终为null,c#,wpf,xaml,findname,C#,Wpf,Xaml,Findname,模板 <Style TargetType="{x:Type local:Viewport}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:Viewport}"> <Border Background="{TemplateBinding

模板

<Style TargetType="{x:Type local:Viewport}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:Viewport}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <ItemsPresenter/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <Canvas x:Name="PART_Canvas" IsItemsHost="True"/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>
内容总是返回null,为什么它不工作

如果我用这个替换,程序将直接退出

content = this.ItemsPanel.FindName("PART_Canvas", this) as FrameworkElement;

使用
FindName
只能找到
模板中声明的元素<代码>项目spanel
不是该模板的一部分
ItemsControl
ItemsPanel
放入
itemsresenter
占位符中,您可以通过该占位符访问
画布
,但首先需要在模板中命名
itemsresenter

<ControlTemplate TargetType="{x:Type local:Viewport}">
   <Border>
      <ItemsPresenter x:Name="PART_ItemsPresenter"/>
   </Border>
</ControlTemplate>

在OnApplyTemplate方法中,尝试content=(Canvas)GetTemplateChild(“PART_Canvas”)之类的操作,看看它是否有效。@Sai GetTemplateChild不起作用。@Canvas在ItemsPanel中,我不知道如何访问它。@sircodesalot
This
,是从我的自定义控件中的ItemsControlHello派生的自定义控件,构造函数是静态的,所以我不能在构造函数中添加'AddHandler',但我把它放在'OnApplyTemplate'中,它工作得很好。非常感谢。
<ControlTemplate TargetType="{x:Type local:Viewport}">
   <Border>
      <ItemsPresenter x:Name="PART_ItemsPresenter"/>
   </Border>
</ControlTemplate>
public class MyListBox : ListBox
{
  public MyListBox()
  {
      AddHandler(FrameworkElement.LoadedEvent, new RoutedEventHandler(ControlIsLoaded));
  }

  private void ControlIsLoaded(object sender, RoutedEventArgs e)
  {
      var canvas = VisualTreeHelper.GetChild(this.Template.FindName("PART_ItemsPresenter", this) as DependencyObject, 0);
  }
}