【问题标题】:WPF Animate DataGridCell text BlurEffect with DataTriggerWPF 动画 DataGridCell 文本 BlurEffect 与 DataTrigger
【发布时间】:2014-12-31 23:04:17
【问题描述】:

我有一个数据网格,我试图在更改行数据并满足某些条件时模糊和淡入文本。除了在动画中添加模糊文本并通过动画使其成为焦点(因为文本不透明度也会淡入)之外,我已经完成了所有工作。

我目前遇到的错误是“无法解析属性路径 'Effect.BlurEffect' 中的所有属性引用。验证适用的对象是否支持这些属性。”。如果我删除动画部分,模糊会按预期工作 - 我想我只需要知道如何正确引用效果,以便我可以对其进行动画处理。

它的工作方式是这样的:我在我的列中设置了一个 staticResource 设置一个动画,当数据触发条件满足一个不可见列中的值时(名称:更改)。

我现在已经进行了大约 4 个小时的搜索,但没有找到任何文档,甚至没有找到任何使用数据触发器执行此操作的示例。任何帮助将不胜感激。下面是我的 XAML 的示例

<DataGrid x:Name="dgDisplay" AutoGenerateColumns="false" ColumnHeaderStyle="{StaticResource headersVisible}" AlternatingRowBackground="Lightblue" AlternationCount="2" GridLinesVisibility="None" >
                <DataGrid.Resources>
                    <Style TargetType="DataGridCell" x:Key="cellHighlight">
                        <Style.Triggers>
                            <DataTrigger
                                Binding="{Binding changed}" Value="S">
                                <Setter Property="Effect">
                                    <Setter.Value>
                                        <BlurEffect Radius="10" KernelType="Gaussian" x:Name="blur"/>
                                    </Setter.Value>
                                </Setter>
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard x:Name="FadeS" >
                                            <DoubleAnimation
                                                Storyboard.TargetProperty="(TextBlock.Opacity)"
                                                From="0.0" To="1.0" Duration="0:0:1" 
                                                AutoReverse="False"  />
                                            <DoubleAnimation
                                                Storyboard.TargetProperty="Effect.BlurEffect" 
                                                From="10" To="0" Duration="00:00:1" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.Resources>
                <DataGrid.Columns>
                    <DataGridTextColumn CellStyle="{StaticResource cellHighlight}" Header="Col1" Binding="{Binding Col1}" FontWeight="Bold" />
                    <DataGridTextColumn Header="Col2" CellStyle="{StaticResource cellHighlight}" Binding="{Binding Col2}" />
                </DataGrid.Columns>
            </DataGrid>

【问题讨论】:

  • 我想了想,将目标属性更改为 BlurEffect.Radius - 现在我没有抛出错误,但模糊没有动画。我已经尝试过 (TextBlock).(BlurEffect.Radius) 和其他一些变体,只是为了得到一个错误。越来越近了……

标签: wpf xaml animation datagrid storyboard


【解决方案1】:

试试这个:

    <DataGrid x:Name="dgDisplay" AutoGenerateColumns="false" ColumnHeaderStyle="{StaticResource headersVisible}" AlternatingRowBackground="Lightblue" AlternationCount="2" GridLinesVisibility="None" >
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridCell}" x:Key="cellHighlight">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                            <Border>
                                <Border.Effect>
                                    <BlurEffect Radius="0" KernelType="Gaussian" x:Name="blurEffect"/>
                                </Border.Effect>
                                <ContentPresenter/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <DataTrigger
                            Binding="{Binding changed}" Value="S">
                                    <DataTrigger.EnterActions>
                                        <BeginStoryboard>
                                            <Storyboard x:Name="FadeS" >
                                                <DoubleAnimation
                                            Storyboard.TargetProperty="(TextBlock.Opacity)"
                                            From="0.0" To="1.0" Duration="0:0:1" 
                                            AutoReverse="False"  />
                                                <DoubleAnimation Storyboard.TargetName="blurEffect" 
                                            Storyboard.TargetProperty="Radius"
                                            From="10" To="0" Duration="00:00:1" />
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </DataTrigger.EnterActions>
                                </DataTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn CellStyle="{StaticResource cellHighlight}" Header="Col1" Binding="{Binding Col1}" FontWeight="Bold" />
            <DataGridTextColumn Header="Col2" CellStyle="{StaticResource cellHighlight}" Binding="{Binding Col2}" />
        </DataGrid.Columns>
    </DataGrid>

【讨论】:

  • 哇!谢谢 - 效果很好。 controlTemplate 显然允许您使用 TargetName,这是我的问题的一部分。再次感谢!
猜你喜欢
  • 2011-02-19
  • 2013-09-24
  • 2019-02-19
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2012-11-08
  • 2013-12-27
相关资源
最近更新 更多