C# 为什么我能';t使用Template.FindName()

C# 为什么我能';t使用Template.FindName(),c#,wpf,C#,Wpf,我有这样一种方法: public void vtornik () { Image mon = (Image)Monday.Template.FindName("monday_2", Monday); mon.Opacity = 0; } <Style x:Key="monday" TargetType="{x:Type ListBox}"> <Style.Resources> <Storyboard x:Key="OnMouseLeft

我有这样一种方法:

public void vtornik ()
{
    Image mon = (Image)Monday.Template.FindName("monday_2", Monday);
    mon.Opacity = 0;
}
<Style x:Key="monday" TargetType="{x:Type ListBox}">
  <Style.Resources>
    <Storyboard x:Key="OnMouseLeftButtonUp1"/>
  </Style.Resources>
  <Style.Triggers>
    <EventTrigger RoutedEvent="UIElement.MouseLeftButtonUp">
      <BeginStoryboard Storyboard="{StaticResource OnMouseLeftButtonUp1}"/>
    </EventTrigger>
  </Style.Triggers>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ListBox}">
        <ControlTemplate.Resources>
          <Storyboard x:Key="OnMouseLeftButtonUp1">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="monday_2">
              <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
            </DoubleAnimationUsingKeyFrames>
          </Storyboard>
        </ControlTemplate.Resources>
        <Grid>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="ValidationStates">
              <VisualState x:Name="Valid"/>
              <VisualState x:Name="InvalidFocused"/>
              <VisualState x:Name="InvalidUnfocused"/>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <Image
            x:Name="monday_1"
            Source="images/monday_1.png"
            Stretch="Fill"
            Opacity="0"/>
          <Image
            x:Name="monday_2"
            HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
            Height="Auto" Width="Auto"
            Margin="0" Source="images/monday_2.png"
            Stretch="Fill" Opacity="0"/>
          <ScrollViewer>
            <ItemsPresenter/>
          </ScrollViewer>
        </Grid>
        <ControlTemplate.Triggers>
          <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Opacity" TargetName="monday_1" Value="1"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
我从我的按钮中调用它,单击:

private void Thuesday_MouseUp(object sender, MouseButtonEventArgs e)
{
    vtornik();
}
模板如下所示:

public void vtornik ()
{
    Image mon = (Image)Monday.Template.FindName("monday_2", Monday);
    mon.Opacity = 0;
}
<Style x:Key="monday" TargetType="{x:Type ListBox}">
  <Style.Resources>
    <Storyboard x:Key="OnMouseLeftButtonUp1"/>
  </Style.Resources>
  <Style.Triggers>
    <EventTrigger RoutedEvent="UIElement.MouseLeftButtonUp">
      <BeginStoryboard Storyboard="{StaticResource OnMouseLeftButtonUp1}"/>
    </EventTrigger>
  </Style.Triggers>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ListBox}">
        <ControlTemplate.Resources>
          <Storyboard x:Key="OnMouseLeftButtonUp1">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="monday_2">
              <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
            </DoubleAnimationUsingKeyFrames>
          </Storyboard>
        </ControlTemplate.Resources>
        <Grid>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="ValidationStates">
              <VisualState x:Name="Valid"/>
              <VisualState x:Name="InvalidFocused"/>
              <VisualState x:Name="InvalidUnfocused"/>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <Image
            x:Name="monday_1"
            Source="images/monday_1.png"
            Stretch="Fill"
            Opacity="0"/>
          <Image
            x:Name="monday_2"
            HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
            Height="Auto" Width="Auto"
            Margin="0" Source="images/monday_2.png"
            Stretch="Fill" Opacity="0"/>
          <ScrollViewer>
            <ItemsPresenter/>
          </ScrollViewer>
        </Grid>
        <ControlTemplate.Triggers>
          <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Opacity" TargetName="monday_1" Value="1"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

为什么我可以通过单击按钮成功调用此方法,但如果没有单击按钮则无法使用它

我获取NullReference exeption-方法找不到图像,然后:


PresentationFramework.dll中发生“System.Reflection.TargetInvocationException”类型的未处理异常“

请确保正在应用模板(或尝试从中获取图像的列表框已加载),要执行此操作,您可以尝试几种不同的方法

应用模板后,您可以使用来执行需要执行的操作

在派生类中重写时,每当应用程序 代码或内部进程调用ApplyTemplate

或者在某些情况下,您可以尝试调用来尝试并强制元素应用其模板

如有必要,构建当前模板的可视树,并返回 值,该值指示此调用是否重建了可视树


当您不是通过按钮调用它时,单击模板是否已应用?我不知道。我想这不是因为我找不到模板资源。如何检查模板是否已应用?@Vadim真棒,很高兴我能提供帮助。如果可以,请记下我的答案,谢谢。