C# 在自定义控件中找不到子控件的名称

C# 在自定义控件中找不到子控件的名称,c#,wpf,custom-controls,C#,Wpf,Custom Controls,我在.NET4.7.2中使用WPF4.5.2C#7 我想通过代码添加带有故事板动画的EventTrigger。 在Xaml中,它看起来是这样的(经过测试,工作正常) 创建EventTrigger工作正常,但调用会引发此错误 在MyNameSpace.MyCustomControl的命名空间中找不到名称“PART_Viewport” 我做错了什么?您应该在情节提要子对象中添加对象: StoryBoardObject.Children.Add(objectAnimationUsingKeyFrame

我在.NET4.7.2中使用WPF4.5.2C#7

我想通过代码添加带有故事板动画的EventTrigger。 在Xaml中,它看起来是这样的(经过测试,工作正常)

创建EventTrigger工作正常,但调用会引发此错误 在MyNameSpace.MyCustomControl的命名空间中找不到名称“PART_Viewport”


我做错了什么?

您应该在情节提要子对象中添加对象:

StoryBoardObject.Children.Add(objectAnimationUsingKeyFrames);

我还没有理解你例子中的每一个细节,但我已经设法产生了一个非常类似的错误

我定义了一个名为vp3d的自定义控件,带有一个路由事件点击。在使用自定义控件的地方,我指定了一个事件处理程序,如下所示:

<cc:vp3d Grid.Row="2">
  <cc:vp3d.Triggers>
    <EventTrigger RoutedEvent="cc:vp3d.Tap">
      <BeginStoryboard>
        <Storyboard>
          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_Viewport"  Storyboard.TargetProperty="Visibility">
            <!-- ... -->
          </ObjectAnimationUsingKeyFrames>
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </cc:vp3d.Triggers>
</cc:vp3d>

这是基于中的一个想法。如果这对您不起作用,该线程中的其他答案可能会有所帮助。

谢谢您的答案,我稍后会这样做,我只是没有显示该行,因为在将关键帧添加到情节提要时不会出现错误。当创建Eventtrigger时,不会抛出错误,但会调用它并运行动画。An会很有帮助。您究竟在哪里调用
故事板。SetTargetName
?请查看原始帖子。谢谢Phil,我没有调用RegisterName,这导致了错误。var vp=GetTemplateChild(“零件视口”)作为Viewport3D;RegisterName(“PART_视口”,vp)。是相关的线路吗
StoryBoardObject.Children.Add(objectAnimationUsingKeyFrames);
<cc:vp3d Grid.Row="2">
  <cc:vp3d.Triggers>
    <EventTrigger RoutedEvent="cc:vp3d.Tap">
      <BeginStoryboard>
        <Storyboard>
          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_Viewport"  Storyboard.TargetProperty="Visibility">
            <!-- ... -->
          </ObjectAnimationUsingKeyFrames>
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </cc:vp3d.Triggers>
</cc:vp3d>
public override void OnApplyTemplate ( )
{
  base.OnApplyTemplate ();

  var vp = GetTemplateChild ("PART_Viewport") as Viewport3D;
  RegisterName ("PART_Viewport", vp ) ;
}