如何修复键属性只能用于IDictionary中包含的元素

时间:2014-02-12 05:39:35

标签: wpf xaml

如何修复错误“Key”属性只能用于“IDictionary”中包含的元素。

<Window x:Class="WpfApplication9.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:system = "clr-namespace:System;assembly=mscorlib"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml">
        <Grid.Resources>
            <!-- Particle Styling -->
            <SolidColorBrush x:Key = "ParticleColor" Color = "#006699"/>
            <SolidColorBrush x:Key = "ParticleBackgroundColor" Color = "Transparent"/>
            <system:Double x:Key = "ParticleOpacity">1</system:Double>
            <system:Double x:Key = "ParticleRadius">5</system:Double>

            <system:Double x:Key = "StartingPointX">0</system:Double>
            <system:Double x:Key = "StartingPointY">-20</system:Double>

            <system:Double x:Key = "RotationPointX">0.5</system:Double>
            <system:Double x:Key = "RotationPointY">0.5</system:Double>

            <!-- StoryBoard -->
            <system:TimeSpan x:Key = "StoryBoardBeginTimeP0">00:00:00.000</system:TimeSpan>
            <system:TimeSpan x:Key = "StoryBoardBeginTimeP1">00:00:00.100</system:TimeSpan>
            <system:TimeSpan x:Key = "StoryBoardBeginTimeP2">00:00:00.200</system:TimeSpan>
            <system:TimeSpan x:Key = "StoryBoardBeginTimeP3">00:00:00.300</system:TimeSpan>
            <system:TimeSpan x:Key = "StoryBoardBeginTimeP4">00:00:00.400</system:TimeSpan>
            <Duration x:Key = "StoryBoardDuration">00:00:01.800</Duration>

            <!-- Particle Origin Angles -->
            <system:Double x:Key = "ParticleOriginAngleP0">0</system:Double>
            <system:Double x:Key = "ParticleOriginAngleP1">-10</system:Double>
            <system:Double x:Key = "ParticleOriginAngleP2">-20</system:Double>
            <system:Double x:Key = "ParticleOriginAngleP3">-30</system:Double>
            <system:Double x:Key = "ParticleOriginAngleP4">-40</system:Double>

            <!-- Particle Position & Timing 1 -->
            <system:Double x:Key = "ParticleBeginAngle1">0</system:Double>
            <system:Double x:Key = "ParticleEndAngle1">90</system:Double>
            <system:TimeSpan x:Key = "ParticleBeginTime1">00:00:00.000</system:TimeSpan>
            <Duration x:Key = "ParticleDuration1">00:00:00.750</Duration>

            <!-- Particle Position & Timing 2 -->
            <system:Double x:Key = "ParticleBeginAngle2">90</system:Double>
            <system:Double x:Key = "ParticleEndAngle2">270</system:Double>
            <system:TimeSpan x:Key = "ParticleBeginTime2">00:00:00.751</system:TimeSpan>
            <Duration x:Key = "ParticleDuration2">00:00:00.300</Duration>

            <!-- Particle Position & Timing 3 -->
            <system:Double x:Key = "ParticleBeginAngle3">270</system:Double>
            <system:Double x:Key = "ParticleEndAngle3">360</system:Double>
            <system:TimeSpan x:Key = "ParticleBeginTime3">00:00:01.052</system:TimeSpan>
            <Duration x:Key = "ParticleDuration3">00:00:00.750</Duration>

            <Style x:Key = "EllipseStyle" TargetType = "Ellipse">
                <Setter Property = "Width" Value = "{StaticResource ParticleRadius}"/>
                <Setter Property = "Height" Value = "{StaticResource ParticleRadius}"/>
                <Setter Property = "Fill" Value = "{StaticResource ParticleColor}"/>
                <Setter Property = "RenderTransformOrigin" Value = "0.5, 0.5"/>
                <Setter Property = "Opacity" Value = "{StaticResource ParticleOpacity}"/>
            </Style>
        </Grid.Resources>
        <Canvas Width = "50" Height = "50">
            <Canvas.Triggers>
                <EventTrigger RoutedEvent = "Canvas.Loaded">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard
                        x:Key = "MetroLoadingAnimation"
                        BeginTime = "{StaticResource StoryBoardBeginTimeP0}"
                        Duration = "{StaticResource StoryBoardDuration}"
                        RepeatBehavior = "Forever">
                                <DoubleAnimation
                            Storyboard.TargetName = "p0"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle1}"
                            To = "{StaticResource ParticleEndAngle1}"
                            BeginTime = "{StaticResource ParticleBeginTime1}"
                            Duration = "{StaticResource ParticleDuration1}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p0"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle2}"
                            To = "{StaticResource ParticleEndAngle2}"
                            BeginTime = "{StaticResource ParticleBeginTime2}"
                            Duration = "{StaticResource ParticleDuration2}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p0"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle3}"
                            To = "{StaticResource ParticleEndAngle3}"
                            BeginTime = "{StaticResource ParticleBeginTime3}"
                            Duration = "{StaticResource ParticleDuration3}"/>
                            </Storyboard>
                        </BeginStoryboard>
                        <BeginStoryboard>
                            <Storyboard
                        x:Key = "MetroLoadingAnimation"
                        BeginTime = "{StaticResource StoryBoardBeginTimeP1}"
                        Duration = "{StaticResource StoryBoardDuration}"
                        RepeatBehavior = "Forever">

                                <DoubleAnimation
                            Storyboard.TargetName = "p1"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle1}"
                            To = "{StaticResource ParticleEndAngle1}"
                            BeginTime = "{StaticResource ParticleBeginTime1}"
                            Duration = "{StaticResource ParticleDuration1}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p1"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle2}"
                            To = "{StaticResource ParticleEndAngle2}"
                            BeginTime = "{StaticResource ParticleBeginTime2}"
                            Duration = "{StaticResource ParticleDuration2}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p1"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle3}"
                            To = "{StaticResource ParticleEndAngle3}"
                            BeginTime = "{StaticResource ParticleBeginTime3}"
                            Duration = "{StaticResource ParticleDuration3}"/>
                            </Storyboard>
                        </BeginStoryboard>
                        <BeginStoryboard>
                            <Storyboard
                        x:Key = "MetroLoadingAnimation"
                        BeginTime = "{StaticResource StoryBoardBeginTimeP2}"
                        Duration = "{StaticResource StoryBoardDuration}"
                        RepeatBehavior = "Forever">

                                <DoubleAnimation
                            Storyboard.TargetName = "p2"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle1}"
                            To = "{StaticResource ParticleEndAngle1}"
                            BeginTime = "{StaticResource ParticleBeginTime1}"
                            Duration = "{StaticResource ParticleDuration1}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p2"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle2}"
                            To = "{StaticResource ParticleEndAngle2}"
                            BeginTime = "{StaticResource ParticleBeginTime2}"
                            Duration = "{StaticResource ParticleDuration2}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p2"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle3}"
                            To = "{StaticResource ParticleEndAngle3}"
                            BeginTime = "{StaticResource ParticleBeginTime3}"
                            Duration = "{StaticResource ParticleDuration3}"/>
                            </Storyboard>
                        </BeginStoryboard>

                        <BeginStoryboard>
                            <Storyboard
                        x:Key = "MetroLoadingAnimation"
                        BeginTime = "{StaticResource StoryBoardBeginTimeP3}"
                        Duration = "{StaticResource StoryBoardDuration}"
                        RepeatBehavior = "Forever">

                                <DoubleAnimation
                            Storyboard.TargetName = "p3"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle1}"
                            To = "{StaticResource ParticleEndAngle1}"
                            BeginTime = "{StaticResource ParticleBeginTime1}"
                            Duration = "{StaticResource ParticleDuration1}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p3"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle2}"
                            To = "{StaticResource ParticleEndAngle2}"
                            BeginTime = "{StaticResource ParticleBeginTime2}"
                            Duration = "{StaticResource ParticleDuration2}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p3"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle3}"
                            To = "{StaticResource ParticleEndAngle3}"
                            BeginTime = "{StaticResource ParticleBeginTime3}"
                            Duration = "{StaticResource ParticleDuration3}"/>
                            </Storyboard>
                        </BeginStoryboard>

                        <BeginStoryboard>
                            <Storyboard
                        x:Key = "MetroLoadingAnimation"
                        BeginTime = "{StaticResource StoryBoardBeginTimeP4}"
                        Duration = "{StaticResource StoryBoardDuration}"
                        RepeatBehavior = "Forever">

                                <DoubleAnimation
                            Storyboard.TargetName = "p4"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle1}"
                            To = "{StaticResource ParticleEndAngle1}"
                            BeginTime = "{StaticResource ParticleBeginTime1}"
                            Duration = "{StaticResource ParticleDuration1}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p4"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle2}"
                            To = "{StaticResource ParticleEndAngle2}"
                            BeginTime = "{StaticResource ParticleBeginTime2}"
                            Duration = "{StaticResource ParticleDuration2}"/>
                                <DoubleAnimation
                            Storyboard.TargetName = "p4"
                            Storyboard.TargetProperty = "(UIElement.RenderTransform).(RotateTransform.Angle)"
                            From = "{StaticResource ParticleBeginAngle3}"
                            To = "{StaticResource ParticleEndAngle3}"
                            BeginTime = "{StaticResource ParticleBeginTime3}"
                            Duration = "{StaticResource ParticleDuration3}"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Canvas.Triggers>
            <Border
        x:Name = "p0"
        Background = "{StaticResource ParticleBackgroundColor}"
        Opacity = "{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform/>
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X = "{StaticResource RotationPointX}" Y = "{StaticResource RotationPointY}"/>
                </Border.RenderTransformOrigin>
                <Ellipse Style = "{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X = "{StaticResource StartingPointX}" Y = "{StaticResource StartingPointY}"/>
                            <RotateTransform Angle = "{StaticResource ParticleOriginAngleP0}"/>
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
        x:Name = "p1"
        Background = "{StaticResource ParticleBackgroundColor}"
        Opacity = "{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform/>
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X = "{StaticResource RotationPointX}" Y = "{StaticResource RotationPointY}"/>
                </Border.RenderTransformOrigin>
                <Ellipse Style = "{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X = "{StaticResource StartingPointX}" Y = "{StaticResource StartingPointY}"/>
                            <RotateTransform Angle = "{StaticResource ParticleOriginAngleP1}"/>
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
        x:Name = "p2"
        Background = "{StaticResource ParticleBackgroundColor}"
        Opacity = "{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform/>
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X = "{StaticResource RotationPointX}" Y = "{StaticResource RotationPointY}"/>
                </Border.RenderTransformOrigin>
                <Ellipse Style = "{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X = "{StaticResource StartingPointX}" Y = "{StaticResource StartingPointY}"/>
                            <RotateTransform Angle = "{StaticResource ParticleOriginAngleP2}"/>
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
        x:Name = "p3"
        Background = "{StaticResource ParticleBackgroundColor}"
        Opacity = "{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform/>
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X = "{StaticResource RotationPointX}" Y = "{StaticResource RotationPointY}"/>
                </Border.RenderTransformOrigin>
                <Ellipse Style = "{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X = "{StaticResource StartingPointX}" Y = "{StaticResource StartingPointY}"/>
                            <RotateTransform Angle = "{StaticResource ParticleOriginAngleP3}"/>
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
            <Border
        x:Name = "p4"
        Background = "{StaticResource ParticleBackgroundColor}"
        Opacity = "{StaticResource ParticleOpacity}">
                <Border.RenderTransform>
                    <RotateTransform/>
                </Border.RenderTransform>
                <Border.RenderTransformOrigin>
                    <Point X = "{StaticResource RotationPointX}" Y = "{StaticResource RotationPointY}"/>
                </Border.RenderTransformOrigin>
                <Ellipse Style = "{StaticResource EllipseStyle}">
                    <Ellipse.RenderTransform>
                        <TransformGroup>
                            <TranslateTransform X = "{StaticResource StartingPointX}" Y = "{StaticResource StartingPointY}"/>
                            <RotateTransform Angle = "{StaticResource ParticleOriginAngleP4}"/>
                        </TransformGroup>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Border>
        </Canvas>
    </Grid>
</Grid>

1 个答案:

答案 0 :(得分:4)

如错误所述,您可以仅在resourceDictionary中存在的元素上设置x:Key属性,而不在字典之外的元素上设置。{/ p>

<Storyboard x:Key = "MetroLoadingAnimation">

从情节提要中删除x:Key,然后设置x:Name

<Storyboard x:Name = "MetroLoadingAnimation">