У меня есть очень простой шаблон TabItem
и один MultiTrigger
с атрибутом SourceName
, используемым для одного Condition
.Следующий XAML выдает NullReferenceException
при запуске без полезной информации, которая помогла бы мне решить проблему.
Самое странное в этом то, что код прекрасно работает, если вы удалите атрибут SourceName
.Или, если вы оставите атрибут SourceName
, но удалите MultiTrigger.EnterActions
и будете использовать вместо него стандартные Setter
s, то он также будет работать.Только комбинация атрибута SourceName
и MultiTrigger.EnterActions
создает NullReferenceException
без видимой причины.Так что с этим не так?
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen">
<Window.Resources>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<ControlTemplate.Resources>
<Storyboard x:Key="Storyboard_TabItem_Hover">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="background" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="00:00:00.3" Value="0.1" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</ControlTemplate.Resources>
<Border x:Name="background" BorderBrush="Red" BorderThickness="1" Background="Yellow">
<Label Grid.Column="1" Content="{TemplateBinding Header}" />
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" SourceName="background" />
<Condition Property="IsSelected" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<BeginStoryboard x:Name="sbHover" Storyboard="{StaticResource Storyboard_TabItem_Hover}"/>
</MultiTrigger.EnterActions>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<TabControl Margin="10">
<TabItem Header="Tab 1" />
<TabItem Header="Tab 2" />
<TabItem Header="Tab 3" />
<TabItem Header="Tab 4" />
</TabControl>
</Window>
Обновление
Как Грег Сансом указал , существует простой обходной путь с использованием MultiDataTrigger
иBinding
.Тем не менее, я все еще хотел бы знать, почему исключение бросается в первую очередь.Я искал Google и MSDN как сумасшедший, но ничего не нашел.Так в чем же проблема?