2012-01-31 94 views
0

我的tabitem是由一個名爲Flashing的VisualState的ResourceDictionary設計的。 我想做這樣的事情,但它不工作。VisualStateManager.GoToState和TabItem不起作用

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> 
+0

可能是一個好主意,以顯示你的風格,你的資源字典的定義,以及任何更多的信息。 。 – 2012-02-06 21:56:49

+0

除非您發佈了ResourceDictionary,否則您將不會得到任何答案。無論如何,您的控件當然不是「由具有VisualState的ResourceDictionary設計」,而是由ResourceDictionary中的Style實現,例如,包含VisualState控件的ControlTemplate。 – Clemens 2012-02-07 11:24:48

+0

@Clemens更新了帖子 – 0x4f3759df 2012-02-07 15:17:19

回答

2

在合併的ResourceDictionary到的TabControl的父窗口的Window.Resources的TabItem的閃爍(在資源字典中ResourceDictionary.xaml這裏):

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

並修復了GlassCube矩形的OpacityMask。我評論它,它高興地閃爍:

<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> 

編輯:有一兩件事提關於顏色資源的鑰匙。你可以定義他們鍵TabBrush1TabBrush2等,但是當你在Color="{DynamicResource ...}"使用它們,你總是使用鍵Brush1Brush2

+0

我得等4個小時才能給你積分。 – 0x4f3759df 2012-02-07 16:00:50

+0

如果不知道** TabBrush11和TabBrush13是什麼**和**哪裏**可能會很困難 – 2012-02-07 16:34:00

+0

我忘了提到另外一件事,請參閱我編輯的答案。 @jberger,很抱歉在意識到您提到它之前刪除了我的過時評論。 – Clemens 2012-02-07 17:02:53