开发者

InvalidOperationException in VS2010

I'm using Expression Blend 4 + Visual Studio 2010 Pro to create a WPF application.

I have created an control Style (or should I say Template?) based on a CheckBox using only Blend 4, which works perfectly. However when I go to VS2010 I get the following "error":

'[Unknown]' property does not point to a DependencyObject in path '(0).(1)[0].(2)'.

Even though when I run the application it works perfectly fine. Now, I don't need to fix this error, but I would like to get rid of it anyway.

Here is the Style's XAML code:

<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">
开发者_StackOverflow中文版              <Ellipse.Fill>
                <RadialGradientBrush>
                  <GradientStop Color="Red"/>
                  <GradientStop Offset="1" Color="#00FF0000"/>
                </RadialGradientBrush>
              </Ellipse.Fill>
            </Ellipse>
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>

As you can see the error references to both Storyboards in the Checked and Unchecked states. However I don't agree with the error in that the property is not pointing to a DependencyObject (whatever that is...), because the Target is "ellipse" which is there; and the Target Property is pointing to a Shape's Fill, which is right there (Ellipse's Fill); to GradientStops[0] of a GreadientBrush, which there are 2 GradientStops in a RadialGradientBrush; and finally to the GradientStop's Color property, which is also there.

Does anyone has a suggestion?

Thanks in advance.


Someone helped me with a solution (I don't know if you would call it a direct solution or a work-around):

If you give a name to the GradientStop you can reference its Color property directly:

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

I guess that this approach shouldn't be necessary, but it certainly looks elegant.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜