c# - 使用 DoubleAnimation 设置图像不透明度

标签 c# wpf xaml mvvm doubleanimation

这应该很简单,但我似乎做对了。 我收藏了 System.Windows.Controls.Image .当我选择其中一个时,我希望所有其他人都获得 0.5 的不透明度。 .我正在使用 MVVM,这背后的逻辑(找到所选图像并将其设置为 Enabled )是在 ViewModel 中完成的,并且正在工作。所以基本上这是有效的:

<Image Grid.Row="0" Source="{Binding ItemImage}" IsEnabled="{Binding ItemImageEnabled}">
<Image.Style>
    <Style TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled"  Value="False">
                <Setter Property="Opacity" Value="0.5"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Opacity" Value="1.0"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Image.Style>
</Image>

现在我希望不透明度的变化是动画的,从 1.0 淡出它至 0.5当图像未被选中时,从 0.5 淡出至 1.0几时。我本以为这会起作用:

<Image Grid.Row="0" Source="{Binding ItemImage}" IsEnabled="{Binding ItemImageEnabled}">
<Image.Style>
    <Style TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled"  Value="False">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.5" BeginTime="0:0:0" Duration="0:0:1"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
            <Trigger Property="IsEnabled" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.5" To="1" BeginTime="0:0:0" Duration="0:0:1"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</Image.Style>

...但事实并非如此

任何人都有任何想法。任何帮助将不胜感激。提前致谢。

最佳答案

你需要Trigger.ExitActions而不是两个 Trigger。这应该是你想要的:

<Style TargetType="Image">
    <Style.Triggers>        
        <Trigger Property="IsEnabled" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.5" To="1" BeginTime="0:0:0" Duration="0:0:1"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.5" BeginTime="0:0:0" Duration="0:0:1"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>

关于c# - 使用 DoubleAnimation 设置图像不透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942800/

相关文章:

c# - 如何在 XAML Canvas 中绘制随机/不规则线?

xaml - 强制 View 为正方形

c# - 是否有标准的 .NET 方法来测试 SqlConnection 字符串是否有效?

c# - 此 WPF 代码能否受益于 Parallel.For 以及如何受益?

c# - 文件 'src' 在这里无效,因为它没有公开类型?

c# - 在现代 UI (Metro) 图表中以编程方式 (MVVM) 添加 ChartSeries

c# - Windows Phone中对象的随机动画

c# - UWP:DataTemplateSelector 和 SelectedItem

c# - Windows 窗体 C# 中的图片框和面板

c# - RESTful 服务基本身份验证