Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在DataTrigger中将设置程序延迟0.5秒?_Wpf_Wpf Controls_Binding - Fatal编程技术网

Wpf 如何在DataTrigger中将设置程序延迟0.5秒?

Wpf 如何在DataTrigger中将设置程序延迟0.5秒?,wpf,wpf-controls,binding,Wpf,Wpf Controls,Binding,我想知道是否有可能延迟datatrigger更改布局0.5秒。有什么简单的方法吗?我需要设置对象的可见性,但请等待0.5秒。任何Adea都将受到高度赞赏 <DataTemplate x:Key="ListBoxItemDataTemplate"> <Grid x:Name="DataItem"> <Image x:Name="IconImage" Source="{Binding XPath=@icon}" Height="1

我想知道是否有可能延迟datatrigger更改布局0.5秒。有什么简单的方法吗?我需要设置对象的可见性,但请等待0.5秒。任何Adea都将受到高度赞赏

<DataTemplate x:Key="ListBoxItemDataTemplate">
        <Grid x:Name="DataItem">
            <Image x:Name="IconImage" Source="{Binding XPath=@icon}" Height="16" Margin="16,0,0,0" Stretch="None" VerticalAlignment="Center" HorizontalAlignment="Left" />
            <TextBlock x:Name="ListboxIemtextBlock" Text="{Binding XPath=@name}" />
            <Image x:Name="ArrowImage" Height="10" Source="Resources/Images/arrow_collapsed_grey.png" Visibility="{Binding XPath=@state}"/>
        </Grid>
         <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}, Mode=FindAncestor}}" Value="True">
                <Setter TargetName="ListboxIemtextBlock" Property="Foreground" Value="White"/>
                <Setter TargetName="IconImage" Property="Source" Value="{Binding XPath=@iconSelected}"/>
                <Setter TargetName="IconImage" Property="Height" Value="16"/>
                <Setter TargetName="ArrowImage" Property="Source" Value="Resources/Images/arrow_collapsed_white.png"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}, Mode=FindAncestor}}" Value="True">
                <Setter TargetName="ListboxIemtextBlock" Property="Foreground" Value="#FF6dacbe"/>
            </DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, Path=SelectedItem.Attributes[retract].Value}" Value="True">      
                <Setter TargetName="ListboxIemtextBlock" Property="Visibility" Value="Hidden" /> 
                <DataTrigger.EnterActions>                     
                    <BeginStoryboard Name="StartAnimation" Storyboard="{StaticResource MakeObjectVisibleAfterHalfASecond}"/>                   
                </DataTrigger.EnterActions>                   
                <DataTrigger.ExitActions>                     
                    <RemoveStoryboard BeginStoryboardName="StartAnimation"/>                   
                </DataTrigger.ExitActions>       
            </DataTrigger> 
         </DataTemplate.Triggers></DataTemplate>

船上故事:

<Storyboard x:Key="MakeObjectVisibleAfterHalfASecond" Storyboard.TargetName="ListboxIemtextBlock">         
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Duration="0" BeginTime="0:0:.5">           
            <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" />         
        </ObjectAnimationUsingKeyFrames>       
    </Storyboard> 

可以使用动画来完成。涉及的项目包括:

1) 一个
ObjectAnimationUsingKeyFrames
,用于设置目标上的
Visibility
属性,其
BeginTime
0:0:.5
,以在情节提要开始时将其延迟半秒

2) 检查属性的
DataTrigger
,该属性的更改将使对象可见(在这种情况下,将在名为
Start
复选框上检查
属性)

3)
DataTrigger中的
BeginStoryboard
。启动动画的EnterActions
,以及
DataTrigger.exitctions中的
RemoveStoryboard
,如果绑定属性更改回来,则使对象再次不可见

下面是一个简单的工作示例:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
      <Storyboard x:Key="MakeObjectVisibleAfterHalfASecond">
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                       Duration="0"
                                       BeginTime="0:0:.5">
          <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" />
        </ObjectAnimationUsingKeyFrames>
      </Storyboard>
  </Page.Resources>
  <DockPanel>  
    <CheckBox  DockPanel.Dock="Top" 
               Margin="10"
               x:Name="Start">Check this to make the label appear</CheckBox>
    <Border BorderThickness="2" 
            BorderBrush="AliceBlue" 
            CornerRadius="5" 
            Margin="10" 
            Padding="10" 
            DockPanel.Dock="Top">
        <Label Visibility="Hidden">
          <Label.Content>This should appear a half second after the box is checked.</Label.Content>
          <Label.Style>
            <Style TargetType="Label">
              <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Start, Path=IsChecked}" Value="True">
                  <DataTrigger.EnterActions>
                    <BeginStoryboard Name="StartAnimation" 
                                     Storyboard="{StaticResource MakeObjectVisibleAfterHalfASecond}"/>
                  </DataTrigger.EnterActions>
                  <DataTrigger.ExitActions>
                    <RemoveStoryboard BeginStoryboardName="StartAnimation"/>
                  </DataTrigger.ExitActions>
                </DataTrigger>
              </Style.Triggers>
            </Style>
          </Label.Style>
        </Label>
    </Border>
    <TextBlock/>
  </DockPanel>
</Page>

选中此项以显示标签
选中该框后,该选项应在半秒后出现。

请注意,您也可以通过省略动画上的
BeginTime
和设置
Duration
来实现这一点,因为这两者在关键帧动画中基本相同。

+1,对!完全忘记了动画:)这是一个很好的方法,在你的示例中。我指的是Meleak提供并删除的样本。我唯一关心的是,您从我从XMLDataprovider生成的代码中引用XML属性“retract”。在我的例子中,我在VS中得到了这个错误-“不包含'retract'的定义,并且找不到接受'object'类型的第一个参数的扩展方法'retract'(是否缺少using指令或程序集引用?)”它找不到retract属性。可以做些什么?再次感谢你。罗伯特,你的样品很好。它简单可靠。谢谢你的帮助。罗伯特,当我试图将其应用于我的解决方案时,我遇到了应用此技术的困难。我想知道你是否能给我一些建议。我在Resources中添加了一个故事板,并使用Enter和Exit操作修改了现有的datatrigger。应用程序将不再运行。我想知道我做错了什么。我在问题区域添加了新的datatrigger。谢谢。请在运行时检查输出窗口中的绑定错误。您发布的修改版本中至少有两个名称拼写错误;他们(可能还有更多我没有注意到的)可能是问题所在。另外,在处理
entreactions
ExitActions
之前,测试DataTrigger看看它是否工作很好-让它改变一些可见的属性,比如
背景
,因为如果
DataTrigger
没有被绊倒,这里的其他任何东西也不会工作。