我有这样的方法:
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;
答案 0 :(得分:1)
确保正在应用模板(或者您尝试从中加载图像的列表框),为此,您可以尝试一些不同的东西。
您可以使用FrameworkElement.OnApplyTemplate
Method执行应用模板时需要执行的操作。
在派生类中重写时,只要应用程序调用 代码或内部进程调用ApplyTemplate。
或者在某些情况下,您可以尝试调用FrameworkElement.ApplyTemplate()
来尝试强制元素应用其模板。
如有必要,构建当前模板的可视树,并返回一个 指示是否通过此调用重建可视树的值。