2012-01-31 5 views
0

私のtabitemは、FlashingというVisualStateを持つResourceDictionaryによってスタイルされています。 私はこのようなことをしたいが、それは働かない。TabStemが動作していないVisualStateManager.GoToState

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

を使用しています。 –

+0

ResourceDictionaryを投稿しない限り、回答は得られません。とにかく、あなたのコントロールは確かに "VisualStateを持つResourceDictionaryによってスタイルされていません"が、ResourceDictionaryのスタイルによって、例えば、 VisualStatesでコントロールを含むControlTemplate – Clemens

+0

@Clemens更新された投稿 – 0x4f3759df

答えて

2

あなたはタブコントロールの親ウィンドウのWindow.ResourcesへのResourceDictionaryをマージするときのTabItemは(ResourceDictionaryのがここ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> 

EDIT:色のリソースのキーについて言及してもう一つのことがあります。あなたは、キーTabBrush1TabBrush2などでそれらを定義していますがColor="{DynamicResource ...}"でそれらを使用する場合、あなたは常にあなたのあなたのResourceDictionaryが定義されたスタイル、および任意の詳細情報を表示するために、おそらく良いアイデアをキーBrush1などBrush2

+0

私はあなたにポイントを与えるために4時間待たなければならない。 – 0x4f3759df

+0

これは、** TabBrush11とTabBrush13の** ** ** **と** ** **を知らなくても難しいかもしれません。 –

+0

私は言いたいことをもう一度忘れました、私の編集された答えを見てください。 @ jberger、あなたがそれを参照していることを理解する前に私の先祖のコメントを削除して申し訳ありません。 – Clemens

関連する問題