Wpf 如何在DataTrigger中将设置程序延迟0.5秒?
我想知道是否有可能延迟datatrigger更改布局0.5秒。有什么简单的方法吗?我需要设置对象的可见性,但请等待0.5秒。任何Adea都将受到高度赞赏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
<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
没有被绊倒,这里的其他任何东西也不会工作。