如何设置触发器,以便在其他控件上发生事件时触发?

时间:2011-03-16 12:08:06

标签: .net wpf xaml animation triggers

当点击窗口中其他位置的某个按钮时,我正在尝试执行元素的动画。

以下是我的尝试:

    <Border Grid.Column="0" BorderThickness="1" BorderBrush="Blue"
                CornerRadius="30" Margin="4">
            <Border.Triggers>
                <EventTrigger **SourceName="btnSearch"  RoutedEvent="UIElement.MouseUp"**>
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard TargetProperty="Opacity">
                                <DoubleAnimation From="0" To="1" Duration="0:0:2"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Border.Triggers>
            <ScrollViewer VerticalScrollBarVisibility="Auto">
                <ItemsControl x:Name="itmsSearch" ItemsSource="{Binding}" Padding="4"
                              ItemTemplate="{StaticResource SearchResultItemDT}">
                </ItemsControl>
            </ScrollViewer>
        </Border>

我的EventTrigger的属性似乎有错误的值,导致抛出异常,说明找不到名为btnSearch的元素。

所述按钮位于我窗口的其他位置:

    <StackPanel
        Height="30"
        Orientation="Horizontal"
        Margin="5">

        <TextBox
            x:Name="txtSearch"
            Width="650"
            FontFamily="Comic Sans MS"
            Foreground="Chocolate" />
        <Button
            x:Name="btnSearch"
            Width="100"
            Content="Go!"
            Click="BtnSearch_Click" />
    </StackPanel>

我只是假设将SourceName设置为所需按钮的名称就可以了。但它不起作用:(

2 个答案:

答案 0 :(得分:1)

尝试将StoryBoard.TargetName属性设置为您要设置动画的元素名称。您已设置StoryBoard.TargetProperty。如果未设置TargetName属性,则它将采用当前元素。

您无需设置SourceName

示例:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Grid.Triggers>
        <EventTrigger  RoutedEvent="Grid.Loaded">
            <BeginStoryboard>
                <Storyboard TargetName="jim2" TargetProperty="Opacity">
                    <DoubleAnimation From="1" To="0" Duration="0:0:4" 
AutoReverse="True" RepeatBehavior="Forever"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>
    <Image Name="jim1" Source="jim1.gif"/>
    <Image Name="jim2" Source="jim2.gif"/>
</Grid>

答案 1 :(得分:0)

您可以使用visualstatemanager来制作动画(将vsm添加到应该设置动画的控件(或任何父级))。您可以在按钮的点击处理程序中启动动画。

VisualStateManager.GoToElementState(this.myControlToAnimate, "MyAnimationState", true)