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

WPF DataTrigger找不到触发器目标

  •  6
  • djskinner  · 技术社区  · 15 年前
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="grid">
                <Grid.Background>
                    <SolidColorBrush x:Name="backgroundBrush" Color="Transparent" Opacity="0.1"/>
                </Grid.Background>
            </Grid>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsExpanded}" Value="True">
                    <Setter TargetName="backgroundBrush" Property="Color" Value="Green" />
                </DataTrigger>
                <Trigger SourceName="grid" Property="IsMouseOver" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetName="backgroundBrush"
                                     Storyboard.TargetProperty="Color"
                                     To="White" Duration="0:0:1.5"/>
                             </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetName="backgroundBrush"
                                    Storyboard.TargetProperty="Color"
                                    AccelerationRatio="1" Duration="0:0:1.5" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.ExitActions> 
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>
    

    如果我删除DataTrigger,它将编译并工作。如果我把DataTrigger改成 TargetName="grid" Property="Background" 它将编译并工作(但没有所需的透明度)。

    我哪里出错了?

    1 回复  |  直到 15 年前
        1
  •  6
  •   Abe Heidebrecht    15 年前

    虽然我不知道为什么画笔不在名称范围内,但您可以通过交换画笔,并在动画中“向下打点”到背景画笔的颜色属性来实现这一点,如下所示:

    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="grid">
                <Grid.Background>
                    <SolidColorBrush Color="Transparent" Opacity="0.1"/>
                </Grid.Background>
            </Grid>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsExpanded}" Value="True">
                    <Setter TargetName="grid" Property="Background">
                        <Setter.Value>
                            <SolidColorBrush Color="Green" Opacity="0.1"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <Trigger SourceName="grid" Property="IsMouseOver" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetName="grid"
                                 Storyboard.TargetProperty="Background.Color"
                                 To="White" Duration="0:0:1.5"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetName="grid"
                                Storyboard.TargetProperty="Background.Color"
                                AccelerationRatio="1" Duration="0:0:1.5" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.ExitActions>
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>