Wpf VS2010中的InvalidOperationException

Wpf VS2010中的InvalidOperationException,wpf,Wpf,我正在使用ExpressionBlend 4+VisualStudio2010Pro创建WPF应用程序 我已经创建了一个基于复选框的控件样式(或者我应该说是模板?),只使用Blend 4,这非常有效。但是,当我转到VS2010时,我得到以下“错误”: “[Unknown]”属性未指向 路径中的DependencyObject “(0)。(1)[0](2)” 即使当我运行这个应用程序时,它也运行得非常好。现在,我不需要修复这个错误,但我还是想摆脱它 以下是样式的XAML代码: <Style

我正在使用ExpressionBlend 4+VisualStudio2010Pro创建WPF应用程序

我已经创建了一个基于复选框的控件样式(或者我应该说是模板?),只使用Blend 4,这非常有效。但是,当我转到VS2010时,我得到以下“错误”:

“[Unknown]”属性未指向 路径中的DependencyObject “(0)。(1)[0](2)”

即使当我运行这个应用程序时,它也运行得非常好。现在,我不需要修复这个错误,但我还是想摆脱它

以下是样式的XAML代码:

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

正如您可以看到的,在选中和未选中状态下,对两个故事板的错误引用。但是,我不同意这个错误,因为属性没有指向DependencyObject(不管是什么…),因为目标是“ellipse”,它就在那里;目标属性指向形状的填充,就在那里(椭圆的填充);到GradientBrush的GradientStops[0],在RadialGradientBrush中有2个GradientStops;最后是GradientStop的颜色属性,也在这里

有人有什么建议吗


提前感谢。

有人帮我提出了一个解决方案(我不知道你会称之为直接解决方案还是变通方案):

如果为GradientStop指定名称,则可以直接引用其颜色属性:

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

[...]
我想这种方法应该没有必要,但它看起来确实很优雅