为什么我不能使用Template.FindName()

时间:2014-02-11 22:00:25

标签: c# wpf

我有这样的方法:

public void vtornik ()
{
    Image mon = (Image)Monday.Template.FindName("monday_2", Monday);
    mon.Opacity = 0;
}

我点击按钮点击它:

private void Thuesday_MouseUp(object sender, MouseButtonEventArgs e)
{
    vtornik();
}

模板如下所示:

<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 - 方法无法找到图像然后:

&#34;未处理的类型&#39; System.Reflection.TargetInvocationException&#39;发生在PresentationFramework.dll&#34;

1 个答案:

答案 0 :(得分:1)

确保正在应用模板(或者您尝试从中加载图像的列表框),为此,您可以尝试一些不同的东西。

您可以使用FrameworkElement.OnApplyTemplate Method执行应用模板时需要执行的操作。

  

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

或者在某些情况下,您可以尝试调用FrameworkElement.ApplyTemplate()来尝试强制元素应用其模板。

  

如有必要,构建当前模板的可视树,并返回一个   指示是否通过此调用重建可视树的值。