2010-12-03 8 views
3

J'utilise Expression Blend 4 + Visual Studio 2010 Pro pour créer une application WPF.InvalidOperationException dans VS2010

J'ai créé un style de contrôle (ou devrais-je dire Template?) Basé sur un CheckBox utilisant uniquement le Blend 4, qui fonctionne parfaitement. Cependant quand je vais à VS2010 j'obtiens ce qui suit "erreur":..

'[inconnu]' propriété ne pointe pas un DependencyObject dans le chemin « (0) (1) [0] (2) '.

Même si je lance l'application, cela fonctionne parfaitement. Maintenant, je n'ai pas besoin de pour corriger cette erreur, mais je voudrais m'en débarrasser de toute façon.

Voici le code XAML du style:

<Style x:Key="IRSensorCheckBoxStyle" TargetType="{x:Type CheckBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type CheckBox}"> 
      <Grid Cursor="Hand"> 
      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal"> 
        <Storyboard> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.StrokeThickness)" Storyboard.TargetName="ellipse"> 
         <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0"/> 
        </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="MouseOver"> 
        <Storyboard> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.StrokeThickness)" Storyboard.TargetName="ellipse"> 
         <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="2"/> 
        </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Pressed"> 
        <Storyboard> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.StrokeThickness)" Storyboard.TargetName="ellipse"> 
         <EasingDoubleKeyFrame KeyTime="0" Value="2"/> 
        </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Disabled"/> 
       </VisualStateGroup> 
       <VisualStateGroup x:Name="CheckStates"> 
       <VisualState x:Name="Checked"> 
        <Storyboard> 
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse"> 
         <EasingColorKeyFrame KeyTime="0:0:0.3" Value="Red"/> 
        </ColorAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Unchecked"> 
        <Storyboard> 
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse"> 
         <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#00FF0000"/> 
        </ColorAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Indeterminate"/> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      <Ellipse x:Name="ellipse" Stroke="Yellow" StrokeThickness="0"> 
       <Ellipse.Fill> 
       <RadialGradientBrush> 
        <GradientStop Color="Red"/> 
        <GradientStop Offset="1" Color="#00FF0000"/> 
       </RadialGradientBrush> 
       </Ellipse.Fill> 
      </Ellipse> 
      </Grid> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 

Comme vous pouvez le voir les références d'erreur à la fois Storyboards dans les états enregistrés et non enregistrés. Cependant je ne suis pas d'accord avec l'erreur en ce que la propriété ne pointe pas vers un DependencyObject (quoi que ce soit ...), parce que la cible est "ellipse" qui est là; et la propriété cible pointe vers un remplissage de forme, qui est juste là (remplissage d'Ellipse); à GradientStops [0] d'un GreadientBrush, où il y a 2 GradientStops dans un RadialGradientBrush; et enfin à la propriété Color de GradientStop, qui est également présente.

Est-ce que quelqu'un a une suggestion?

Merci d'avance.

Répondre

2

Quelqu'un m'a aidé avec une solution (je ne sais pas si vous appelez une solution directe ou un travail autour):

Si vous donnez un nom à la GradientStop vous pouvez référencer sa propriété couleur directement :

<Ellipse.Fill> 
    <RadialGradientBrush> 
    <GradientStop x:Name="Offset0" Color="Red"/> 
    <GradientStop x:Name="Offset1" Offset="1" Color="#00FF0000"/> 
    </RadialGradientBrush> 
</Ellipse.Fill> 

[...] 

<VisualState x:Name="Checked"> 
    <Storyboard> 
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Color" Storyboard.TargetName="Offset0"> 
     <EasingColorKeyFrame KeyTime="0:0:0.3" Value="Red"/> 
    </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
</VisualState> 
<VisualState x:Name="Unchecked"> 
    <Storyboard> 
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Color" Storyboard.TargetName="Offset0"> 
     <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#00FF0000"/> 
    </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
</VisualState> 

Je suppose que cette approche ne devrait pas être nécessaire, mais il semble certainement élégant.

Questions connexes