2011-03-16 49 views
0

我试图执行一个元素的动画时,点击某个按钮,它存在于窗口的其他地方。如何设置我的触发器,以便在其他控件上发生事件时触发它?

这是我曾尝试:

<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设置到所需按钮的名称会做的伎俩。但它不工作:(

回答

1

尝试StoryBoard.TargetName属性设置为你想要animate.You元素名称已经设置了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> 
+0

我试过设置TargetName =“btnSearch”,但那没有做任何事......没有回应。即便如此,我觉得这听起来有点倒退了。我的触发器在问题中显示的Border元素中,所以我不应该设置TargetName ... Border本身就是目标。我希望在按钮的Click事件被触发时边框中指定的动画发生。 – ForeverLearnNeverMaster 2011-03-16 12:32:47

+0

此外,我试图将触发器移动到我的Button元素中(所以现在它是,然后我尝试将TargetName设置为我的Border元素的名称...并且我仍然获得了“ name not found“例外 – ForeverLearnNeverMaster 2011-03-16 12:34:08

+0

WOOPS!好吧,你是对的,我在之前的评论中发布的内容有效,只不过是我将整个内容部分指定为一个资源,当我将它移动到我的实际元素内容时,谢谢! – ForeverLearnNeverMaster 2011-03-16 13:24:14

0

您可以使用visualstatemanager做你的动画(将vsm添加到应该动画的控件(或任何父项))。并且您可以在按钮的点击处理程序中启动动画。

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

没有办法在XAML中做我想要的吗? – ForeverLearnNeverMaster 2011-03-16 13:04:09