Wpf VS2010中的InvalidOperationException
我正在使用ExpressionBlend 4+VisualStudio2010Pro创建WPF应用程序 我已经创建了一个基于复选框的控件样式(或者我应该说是模板?),只使用Blend 4,这非常有效。但是,当我转到VS2010时,我得到以下“错误”: “[Unknown]”属性未指向 路径中的DependencyObject “(0)。(1)[0](2)” 即使当我运行这个应用程序时,它也运行得非常好。现在,我不需要修复这个错误,但我还是想摆脱它 以下是样式的XAML代码:Wpf VS2010中的InvalidOperationException,wpf,Wpf,我正在使用ExpressionBlend 4+VisualStudio2010Pro创建WPF应用程序 我已经创建了一个基于复选框的控件样式(或者我应该说是模板?),只使用Blend 4,这非常有效。但是,当我转到VS2010时,我得到以下“错误”: “[Unknown]”属性未指向 路径中的DependencyObject “(0)。(1)[0](2)” 即使当我运行这个应用程序时,它也运行得非常好。现在,我不需要修复这个错误,但我还是想摆脱它 以下是样式的XAML代码: <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>
正如您可以看到的,在选中和未选中状态下,对两个故事板的错误引用。但是,我不同意这个错误,因为属性没有指向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>
[...]
我想这种方法应该没有必要,但它看起来确实很优雅