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真棒,很高兴我能提供帮助。如果可以,请记下我的答案,谢谢。