更改已按下事件的路径的填充属性

时间:2015-04-25 15:16:45

标签: xaml windows-phone-8.1 visualstatemanager

我有一个包含路径元素的border元素,当点击边框时,我想将路径的fill属性更改为另一种颜色。

我已经搜索了一个答案但是每个人似乎都使用控件模板和样式(通常用于按钮)来表示这种行为。有没有办法在不使用控件模板和样式的情况下更改颜色?

到目前为止我的代码如下,

<Border>
    <Canvas Width="32" Height="32" Canvas.Left="0" Canvas.Top="0">
        <Path x:Name="MyIcon" Width="30.5" Height="30.5" 
              Canvas.Left="0.75" Canvas.Top="0.750008" 
              Stretch="Fill" StrokeThickness="3" 
              StrokeLineJoin="Round" Stroke="{StaticResource PhoneForegroundBrush}" 
              Data="F1 M 15.9707,2.25001L 19.167,12.7919L 29.75,12.8197L 21.2578,19.1225L 24.4292,29.75L 16.0879,23.2829L 7.51911,29.6986L 10.831,19.2255L 2.25,12.7983L 12.7665,12.8177L 15.9707,2.25001 Z "/>
    </Canvas>
    <i:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="Tapped">
            <core:InvokeCommandAction Command="{Binding ChangeCommand}"/>
        </core:EventTriggerBehavior>
    </i:Interaction.Behaviors>

    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CommonStates">
            <VisualState x:Name="Normal" />
            <VisualState x:Name="Pressed">
                <Storyboard>
                    <ColorAnimation Storyboard.TargetName="MyIcon" 
                                    Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)"
                                    To="#FFFF0000" Duration="0:0:0.5" />
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Border>

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在“已按下”VisualState中,您正在设置Color的{​​{1}}属性,该属性已分配给“MyIcon”的SolidColorBrush属性{{1} }}。但是,您尚未将Fill对象分配给“MyIcon”的Path属性。因此,如果您尝试进入“按下”状态,它将无法找到SolidColorBrush引用并将抛出异常。最简单的解决方案是在“MyIcon”Fill中指定SolidColorBrush 另外我假设您已将Fill="Transparent"放在Path内,并且您在适当的位置呼叫Border