代码之家  ›  专栏  ›  技术社区  ›  ozczecho

WPF触发器/样式重写另一个

  •  1
  • ozczecho  · 技术社区  · 15 年前

    我有一个 ListView ItemContainerStyle 定义如下:

                                <ListView Width="auto" 
                                  SelectionMode="Single"
                                  ItemContainerStyle="{StaticResource ItemContStyle}"
                                   .... 
    

    baseListViewStyle ,我定义了一些基本样式以应用于我的 列表视图 Style 触发:

    <Style x:Key="baseListViewStyle" TargetType="ListViewItem">
        <Setter Property="Height" Value="20" />
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>
    

    这个 Trigger 当鼠标移到行上时,此处高亮显示该行。不错。

    我也有一个 DataTrigger ListViewItem :

                    <Style.Triggers>
                    <DataTrigger Binding="{Binding IsTestTrue}" Value="True">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource SomeFunkyAnimation}" />
                        </DataTrigger.EnterActions>
                    </DataTrigger>
    

    如果测试是真的,那么一个很好的小淡入淡出动画播放出来。这一切工作,除了当我把我的鼠标移到行“测试是真的”动画停止和鼠标样式显示。

    你知道我怎样才能在我的生活中超越这种风格吗 数据触发器 ?

    短暂性脑缺血发作

    更新:

    SomeFunkyAnimation 设置背景颜色的动画。它的xaml如下:

                <Style x:Key="ItemContStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource baseListViewStyle}">
                <Style.Resources>
                    <Storyboard x:Key="SomeFunkyAnimation" FillBehavior="Stop">
                        <ColorAnimation Storyboard.TargetProperty="Background.Color" RepeatBehavior="Forever"  From="Red" To="Pink" Duration="0:0:3"/>
                    </Storyboard>
                </Style.Resources>
    

    这个 MouseOver baseListViewStyle . 这个 数据触发器 ItemContStyle

    我试着把它取下来 鼠标悬停 但我相信这并没有起作用 Listview 鼠标悬停 样式已定义,因此它将覆盖我的 数据触发器 动画。

    1 回复  |  直到 13 年前
        1
  •  0
  •   ozczecho    15 年前

    在花了几个小时的时间解决这个问题之后,我终于找到了一个解决办法。由于某些原因,ColorAnimation只是在鼠标移过之后停止设置动画。不知道为什么,也许一个wpf的错误谁知道。解决办法是重新调整我的动画。下面的操作与此相同:

                        <Storyboard x:Key="SomeFunkyAnimation" FillBehavior="Stop">
                        <DoubleAnimation Storyboard.TargetProperty="Background.Opacity" RepeatBehavior="Forever" AutoReverse="true"  From="0.2" To="1.0" Duration="0:0:1"/>
                    </Storyboard>
    

    然后是相同的DataTrigger和一个额外的Setter作为背景:

                    <DataTrigger Binding="{Binding IsTestTrue}" Value="True">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource SomeFunkyAnimation}" />
                        </DataTrigger.EnterActions>
                        <Setter Property="Background" Value="Red" />
                    </DataTrigger>
    

    终于和平了。