单击其他包装面板时的动画

时间:2016-07-08 20:26:50

标签: c# xaml animation mvvm

我有一个列表视图,通过我的绑定填充了包装面板。我的代码目前将为MouseEnter(不透明度高达1.0)和MouseLeave(不透明度低至{Binding PanelOpacity})的不透明度设置动画。但是,当我选择一个不同的包装面板时,我需要触发MouseLeave的故事板以降低不透明度。

段:

<ListView.ItemTemplate>
    <DataTemplate>
        <WrapPanel x:Name="panelObject" Orientation="Horizontal" Margin="5,7">
            <WrapPanel.InputBindings>
                <MouseBinding MouseAction="LeftClick"
                              Command="{Binding DataContext.GridClickCmd, RelativeSource={RelativeSource AncestorType=Grid}}"
                              CommandParameter="{Binding Server}"/>
            </WrapPanel.InputBindings>
            <WrapPanel.Style>
                <Style TargetType="{x:Type WrapPanel}">
                    <Style.Resources>
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
                    </Style.Resources>
                    <Setter Property="Opacity" Value="{Binding PanelOpacity}" />
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Opacity" Value="1.0" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </WrapPanel.Style>
        <WrapPanel.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                    <Storyboard x:Name="FadeIn">
                        <DoubleAnimation
                                    Storyboard.TargetProperty="Opacity"
                                    To="1.0" Duration="0:0:0.2" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            <EventTrigger RoutedEvent="MouseLeave">
                <BeginStoryboard>
                    <Storyboard x:Name="FadeOut">
                        <DoubleAnimation
                                    Storyboard.TargetProperty="Opacity"
                                    To="{Binding PanelOpacity}" Duration="0:0:0.2" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            <EventTrigger RoutedEvent="SourceUpdated">
                <BeginStoryboard>
                    <Storyboard x:Name="ChangeSelection">
                        <DoubleAnimation
                                    Storyboard.TargetProperty="Opacity"
                                    To="{Binding PanelOpacity}" Duration="0:0:0.2" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </WrapPanel.Triggers>
        </WrapPanel>
    </DataTemplate>
</ListView.ItemTemplate>

我尝试过使用一些不同的路由事件,当点击不同的包装面板时,它们似乎都没有触发。

我尝试的最后一件事是:

<EventTrigger RoutedEvent="SourceUpdated">
    <BeginStoryboard>
        <Storyboard x:Name="ChangeSelection">
            <DoubleAnimation
                        Storyboard.TargetProperty="Opacity"
                        To="{Binding PanelOpacity}" Duration="0:0:0.2" />
        </Storyboard>
    </BeginStoryboard>
</EventTrigger>

编辑:我的C#中有这个。它目前工作正常,没有动画:

 _viewModel.MainPanel.ToList().Find(x => x.Server == (string)parameter).PanelOpacity = 1.0;
 _viewModel.MainPanel.ToList().FindAll(x => x.Server != (string)parameter).ForEach(x => x.PanelOpacity = 0.5);

第二次编辑:添加了更多标签以显示代码的位置。 最终编辑:添加了完整的ItemTemplate代码。

0 个答案:

没有答案