Не могу разобраться с VisualStates

293
22 июля 2017, 04:31

Имею в своём приложении стиль для TabItem, решил использовать VisualStateManager вместо обычных триггеров. Когда определил состояния Normal и MouseOver всё работало нормально. Но после добавления Selected, Unselected и VisualStateGroup.Transitions, при наведении курсора на один из TabItem-ов, стал получать NullReferenceException. Подскажите, что я делаю не так?

Стиль, о котором идет речь:

<Style TargetType="{x:Type TabItem}">
            <Style.Setters>
                <Setter Property="Background">
                    <Setter.Value>
                        <SolidColorBrush Color="DimGray" Opacity="0.1"/>
                    </Setter.Value>
                </Setter>
                <Setter Property="BorderBrush"              Value="Black"/>
                <Setter Property="BorderThickness"          Value="0.5"/>
                <Setter Property="Height"                   Value="30"/>
                <Setter Property="OverridesDefaultStyle"    Value="True"/>
                <Setter Property="Width"                    Value="126"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabItem}">
                            <Border x:Name="border"
                                    Background="{TemplateBinding Background}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    CornerRadius="0,0,6,6"
                                    Margin="0,0,6,0">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualStateGroup.States>
                                            <VisualState x:Name="Normal"/>
                                            <VisualState x:Name="MouseOver">
                                                <Storyboard Storyboard.TargetName="border"
                                                        Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                                                    <ColorAnimation Duration="0:0:0.1" To="Black"/>
                                                </Storyboard>
                                            </VisualState>
                                            <VisualState x:Name="Selected">
                                                <Storyboard Storyboard.TargetName="border"
                                                        Storyboard.TargetProperty="(Border.BorderThickness)">
                                                    <ThicknessAnimation Duration="0:0:0.1" To="1"/>
                                                </Storyboard>
                                            </VisualState>
                                            <VisualState x:Name="Unselected">
                                                <Storyboard Storyboard.TargetName="border"
                                                        Storyboard.TargetProperty="(Border.BorderThickness)">
                                                    <ThicknessAnimation Duration="0:0:0.1" To="0.5"/>
                                                </Storyboard>
                                            </VisualState>
                                        </VisualStateGroup.States>
                                        <VisualStateGroup.Transitions>
                                            <VisualTransition From="MouseOver" To="Normal">
                                                <Storyboard Storyboard.TargetName="border"
                                                        Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                                                    <ColorAnimation Duration="0:0:0.1" To="DimGray"/>
                                                </Storyboard>
                                            </VisualTransition>
                                        </VisualStateGroup.Transitions>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <ContentPresenter ContentSource="Header"
                                                  HorizontalAlignment="Center"
                                                  VerticalAlignment="Center"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
Answer 1

Сам разобрался, вот так работает без ошибок:

<Style TargetType="{x:Type TabItem}">
            <Style.Setters>
                <Setter Property="Background">
                    <Setter.Value>
                        <SolidColorBrush Color="DimGray" Opacity="0.1"/>
                    </Setter.Value>
                </Setter>
                <Setter Property="BorderBrush"              Value="Black"/>
                <Setter Property="BorderThickness"          Value="0.5,0,0.5,0.5"/>
                <Setter Property="Height"                   Value="30"/>
                <Setter Property="OverridesDefaultStyle"    Value="True"/>
                <Setter Property="Width"                    Value="126"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabItem}">
                            <Border x:Name="border"
                                    Background="{TemplateBinding Background}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    CornerRadius="0,0,6,6"
                                    Margin="0,0,6,0">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualStateGroup.States>
                                            <VisualState x:Name="Normal"/>
                                            <VisualState x:Name="MouseOver">
                                                <Storyboard Storyboard.TargetName="border"
                                                        Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                                                    <ColorAnimation Duration="0:0:0.1" To="Black"/>
                                                </Storyboard>
                                            </VisualState>
                                        </VisualStateGroup.States>
                                    </VisualStateGroup>
                                    <VisualStateGroup x:Name="SelectionStates">
                                        <VisualStateGroup.States>
                                            <VisualState x:Name="Selected">
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetName="border"
                                                                        Storyboard.TargetProperty="(Border.BorderThickness)"
                                                                        Duration="0:0:0.1"
                                                                        To="1,0,1,1"/>
                                                    <ColorAnimation Storyboard.TargetName="border"
                                                                    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                                                    Duration="0:0:0.1"
                                                                    To="Black"/>
                                                </Storyboard>
                                            </VisualState>
                                            <VisualState x:Name="Unselected"/>
                                        </VisualStateGroup.States>
                                        <VisualStateGroup.Transitions>
                                            <VisualTransition GeneratedDuration="0:0:0.1"
                                                              From="Selected"
                                                              To="Unselected">
                                                <Storyboard>
                                                    <ThicknessAnimation Storyboard.TargetName="border"
                                                                        Storyboard.TargetProperty="(Border.BorderThickness)"
                                                                        Duration="0:0:0.1"
                                                                        To="0.5,0,0.5,0.5"/>
                                                    <ColorAnimation Storyboard.TargetName="border"
                                                                    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                                                    Duration="0:0:0.1"
                                                                    To="DimGray"/>
                                                </Storyboard>
                                            </VisualTransition>
                                        </VisualStateGroup.Transitions>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <ContentPresenter ContentSource="Header"
                                                  HorizontalAlignment="Center"
                                                  VerticalAlignment="Center"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
READ ALSO
C#: Какими средствами можно реализовать получение почты на C#?

C#: Какими средствами можно реализовать получение почты на C#?

Доброго времени суток! Возникла необходимость парсить почту на Gmail`еПодскажите пожалуйста средства для подобной реализации

226
Бегает фокус во время работы скрытого Word

Бегает фокус во время работы скрытого Word

При выполнении кода (вызываю скрытое окно Word в котором пересохраняю файлы в другом формате) в момент открытия Word'ом очередного файла, у текущего...

205
Взаимодействие с изображением javascript

Взаимодействие с изображением javascript

Всем приветВозникли проблемы (если быть точнее, то совсем не понимаю) с загрузкой и редактированием изображения

297
Передвижение по svg-путям

Передвижение по svg-путям

Подскажите, пожалуйста, пример реализации передвижения по path нескольких объектов (у меня они нарисованы в canvas,это массив из 10-ти банальных...

222