VisualStateManager.GoToState с TabItem не работает - PullRequest
0 голосов
/ 01 февраля 2012

Мой tabitem стилизован ResourceDictionary, который имеет VisualState с именем Flashing. Я хочу сделать что-то подобное, но это не работает.

public static void FlashTab(TabItem tbi)
{
  bool thisReturnsFalse =   VisualStateManager.GoToState(tbi, "Flashing", true);
}

XAML

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Color x:Key="TabBrush0">#7F605F5F</Color>
    <Color x:Key="TabBrush01">#7F605F5F</Color>
    <Color x:Key="TabBrush02">#7F605F5F</Color>
    <Color x:Key="TabBrush03">#7F605F5F</Color>
    <Color x:Key="TabBrush04">#7F605F5F</Color>


    <Color x:Key="TabBrush1">#7F7E7E7E</Color>
    <Color x:Key="TabBrush2">#7FFDFDFD</Color>
    <Color x:Key="TabBrush3">#7FFFFFFF</Color>
    <Color x:Key="TabBrush4">#BFFFFFFF</Color>
    <Color x:Key="TabBrush5">#F2FFFFFF</Color>
    <Color x:Key="TabBrush6">#FF6096E5</Color>
    <Color x:Key="TabBrush7">#FF9B7C35</Color>
    <Color x:Key="TabBrush8">#FFB0BAA1</Color>
    <Color x:Key="TabBrush10">White</Color>

    <Color x:Key="Foreground">#FF000000</Color>

    <Color x:Key="MouseOverColor">Purple</Color>
    <Color x:Key="SelectedColor">Blue</Color>

    <SolidColorBrush x:Key="ForegroundBrush" Color="{DynamicResource Foreground}" />




    <Style TargetType="{x:Type TabItem}"  >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid Margin="1,0,1,0" >
                        <VisualStateManager.VisualStateGroups>

                            <VisualStateGroup x:Name="CommonStates">

                                <VisualState x:Name="Normal"/>


                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="InnerRectangleMouseOver">
                                            <EasingDoubleKeyFrame KeyTime="0" Value=".2"/>
                                        </DoubleAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>

                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="InnerRectangleSelected">
                                            <EasingDoubleKeyFrame KeyTime="0" Value=".2"/>
                                        </DoubleAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>


                                <VisualState x:Name="Flashing" >
                                    <Storyboard>
                                        <DoubleAnimation 
                                            Storyboard.TargetName="GlassCube"
                                            Storyboard.TargetProperty="Opacity"
                                            From="0.0"
                                            To="1.0"                     
                                            Duration="0:0:0.33"
                                            AutoReverse="True"
                                            RepeatBehavior="Forever"/>
                                    </Storyboard>
                                </VisualState>


                                <VisualState x:Name="Disabled"/>
                            </VisualStateGroup>


                        </VisualStateManager.VisualStateGroups>

                        <Rectangle x:Name="InnerRectangleMouseOver" Margin="1,1,1,1" RadiusY="5" RadiusX="5" StrokeThickness="3" Opacity="0">
                            <Rectangle.Effect>
                                <BlurEffect/>
                            </Rectangle.Effect>

                            <Rectangle.Fill>
                                <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource MouseOverColor}" Offset="0.228"/>
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle>

                        <Rectangle x:Name="InnerRectangleSelected" Margin="1,1,1,1" RadiusY="5" RadiusX="5" StrokeThickness="3" Opacity="0">
                            <Rectangle.Effect>
                                <BlurEffect/>
                            </Rectangle.Effect>

                            <Rectangle.Fill>
                                <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource SelectedColor}" Offset="0.228"/>
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle>






                        <Rectangle x:Name="InnerRectangle" Margin="1,1,1,1" RadiusY="5" RadiusX="5" StrokeThickness="3" >
                            <Rectangle.Effect>
                                <BlurEffect/>
                            </Rectangle.Effect>
                            <Rectangle.Stroke>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource Brush1}" Offset="1"/>
                                    <GradientStop Color="{DynamicResource Brush0}"/>
                                </LinearGradientBrush>
                            </Rectangle.Stroke>
                            <Rectangle.Fill>
                                <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource Brush13}" Offset="0.228"/>
                                    <GradientStop Color="{DynamicResource Brush7}"/>
                                    <GradientStop Color="{DynamicResource Brush7}" Offset="0.823"/>
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle>


                        <Rectangle x:Name="GlassCube" Margin="1,1,1,1" RadiusY="5" RadiusX="5" StrokeThickness="3" Opacity="1">
                            <Rectangle.Stroke>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource Brush4}"/>
                                    <GradientStop Color="{DynamicResource Brush4}"/>
                                    <GradientStop Color="{DynamicResource Brush6}" Offset="0.254"/>
                                    <GradientStop Color="{DynamicResource Brush5}" Offset="0.401"/>
                                </LinearGradientBrush>
                            </Rectangle.Stroke>
                            <Rectangle.OpacityMask>
                                <RadialGradientBrush>
                                    <GradientStop Color="{DynamicResource Brush11}" Offset="0"/>
                                    <GradientStop Color="{DynamicResource Brush13}" Offset="1"/>
                                </RadialGradientBrush>
                            </Rectangle.OpacityMask>
                            <Rectangle.Fill>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource Brush12}"/>
                                    <GradientStop Color="{DynamicResource Brush7}" Offset="0.47"/>
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle>

                        <ContentPresenter HorizontalAlignment="Center" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" ContentSource="Header" >
                            <TextBlock.Foreground>
                                <SolidColorBrush Color="{DynamicResource Foreground}"/>
                            </TextBlock.Foreground>
                        </ContentPresenter>

                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>



</ResourceDictionary>

1 Ответ

2 голосов
/ 07 февраля 2012

TabItem будет мигать при слиянии ResourceDictionary в Window.Resources родительского окна TabControl (ResourceDictionary находится в ResourceDictionary.xaml здесь):

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ResourceDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

и когда вы исправите OpacityMask прямоугольника GlassCube. Я закомментировал это, и он счастливо мигает:

<Rectangle x:Name="GlassCube" Margin="1,1,1,1" RadiusY="5" RadiusX="5" StrokeThickness="3" Opacity="1">
    <Rectangle.Stroke>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="{DynamicResource TabBrush4}"/>
            <GradientStop Color="{DynamicResource TabBrush4}"/>
            <GradientStop Color="{DynamicResource TabBrush6}" Offset="0.254"/>
            <GradientStop Color="{DynamicResource TabBrush5}" Offset="0.401"/>
        </LinearGradientBrush>
    </Rectangle.Stroke>
    <!--<Rectangle.OpacityMask>
        <RadialGradientBrush>
            <GradientStop Color="{DynamicResource TabBrush11}" Offset="0"/>
            <GradientStop Color="{DynamicResource TabBrush13}" Offset="1"/>
        </RadialGradientBrush>
    </Rectangle.OpacityMask>-->
    <Rectangle.Fill>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="{DynamicResource TabBrush12}"/>
            <GradientStop Color="{DynamicResource TabBrush7}" Offset="0.47"/>
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

РЕДАКТИРОВАТЬ: есть еще одна вещь, которую следует упомянуть относительно ключей цветовых ресурсов. Вы определяете их с помощью клавиш TabBrush1, TabBrush2 и т. Д., Но когда вы используете их в Color="{DynamicResource ...}", вы всегда используете клавиши Brush1, Brush2 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...