使用StoryBoard的WPF如何单击每次重置样式

时间:2018-08-18 16:34:29

标签: c# .net wpf xaml

所以我刚刚创建了一个带有情节提要动画的自定义控件。

启动动画的事件触发看起来像这样

<EventTrigger RoutedEvent="MouseDown">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation
                                            Storyboard.TargetName="SelectedBorder"
                                            Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"
                                            To="#00C8FC" Duration="0:0:0.25">
                                        </ColorAnimation>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>

如您所见,在MouseDown事件中,我正在更改边框的颜色,就是这样。

单击它后它会改变颜色,例如,我单击了另一个控件。 在这种情况下,我想将最新边框的背景设置为白色。 目前,它正在更改我在表单上具有的每个控件实例的边框颜色。

我需要能够以某种方式每次单击XAML来重置颜色。 想象一下.. 我单击一个按钮,边框变为蓝色。 我单击另一个按钮(相同类型),该按钮变为蓝色,并且按钮一个重置为白色。

此刻,就像 我单击一个按钮,它变成蓝色。 我单击另一个,它也会变成蓝色,但是旧的保持蓝色。

这是它的样子 enter image description here

1 个答案:

答案 0 :(得分:1)

不建议使用

nifi.properties来指示选择MouseDown。更为可靠的方法是在ListViewItem中使用属性触发器。

enter image description here

查看下面的代码,您会发现我在Style中使用Trigger处理Style的选择状态。如果您使用ListViewItemMouseDown事件,您会注意到您无法枚举影响选择的所有事件。

MouseUp

enter image description here

当您要保持动画播放时,只需将设置器替换为动作即可:

<ListView>
    <ListViewItem>Coll Programmer1</ListViewItem>
    <ListViewItem>MinecraftGeek1</ListViewItem>
    <ListViewItem>Steve</ListViewItem>
    <ListViewItem>John</ListViewItem>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <Grid Name="RootPanel" Background="Transparent" Height="48">
                            <Rectangle Name="SelectedBorder" Width="8" Fill="#00c9fe"
                                       HorizontalAlignment="Left" Visibility="Collapsed" />
                            <ContentPresenter Margin="12 0 0 0" />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter TargetName="SelectedBorder" Property="Visibility" Value="Visible" />
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="RootPanel" Property="Background" Value="#00c9fe" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>