我有一个EventTrigger动画,可以在点击时更改TextBlock的不透明度 使用此触发器是在用户单击时隐藏我的TextBlock 它完美地运作。
但是,我无法弄清楚如何撤消此EventTrigger - 获取不透明度 - 。
当我尝试在我的代码隐藏中更改它时,触发器具有优先级,因此它不起作用 我已经考虑过创建一个新的EventTrigger来做相反的事情,但我不知道我是否可以在我的代码隐藏中调用它。
仅当用户点击按钮时,我的TextBlock才是Hide = True。这是一个错误TextBlock 用户可以点击它来隐藏它 如果用户再次单击该按钮,则此TextBox现在由不透明度隐藏 我必须从代码隐藏中改变这种不透明度我不知道如何用其他方法搞清楚。
我的XAML:
<TextBlock x:Name="ErrorTextBlock">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="TextBlock.MouseDown">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ErrorTextBlock"
Storyboard.TargetProperty="Opacity"
From="1" To="0" Duration="0:0:2"
AutoReverse="False">
编辑:我找不到问题的答案,但我找到了另一个解决方案。
问题是订单 - 动画优先,代码背后第二 - 。
所以我只是把我的XAML动画写成代码。
优先权现已结束,问题得到解决。 =)
答案 0 :(得分:0)
在我看来,您希望的行为可以归结为希望能够根据From
的当前状态调整动画中的To
和TextBlock
值
我能够通过编写一个简单的IValueConverter
并使用转换器将TextBlock.Opacity
属性绑定到动画的To
属性来实现此目的(当然,{没有转换器的Opacity
属性的{1}}属性。
转换器:
From
我的简单测试XAML来演示它:
class SubtractFromConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is double && parameter is double)
{
double doubleValue = (double)value, doubleParameter = (double)parameter;
return doubleParameter - doubleValue;
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
}
每次点击<StackPanel>
<TextBlock x:Name="textBox1" FontSize="36" Text="Hello world!">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="TextBlock.MouseDown">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="textBox1"
Storyboard.TargetProperty="Opacity"
From="{Binding ElementName=textBox1, Path=Opacity}"
Duration="0:0:2"
AutoReverse="False">
<DoubleAnimation.To>
<Binding ElementName="textBox1" Path="Opacity">
<Binding.Converter>
<local:SubtractFromConverter />
</Binding.Converter>
<Binding.ConverterParameter>
<system:Double>1.0</system:Double>
</Binding.ConverterParameter>
</Binding>
</DoubleAnimation.To>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Opacity: " />
<TextBlock Text="{Binding ElementName=textBox1, Path=Opacity}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Opacity: " />
<TextBlock>
<TextBlock.Text>
<Binding ElementName="textBox1" Path="Opacity">
<Binding.Converter>
<local:SubtractFromConverter />
</Binding.Converter>
<Binding.ConverterParameter>
<system:Double>1.0</system:Double>
</Binding.ConverterParameter>
</Binding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</StackPanel>
时,它都会反转动画。
注意:您需要做一些额外的工作来调整技术,以确保动画始终按照您想要的方向运行。例如,不是仅使用当前的TextBlock
值,而是绑定到跟踪当前切换状态的其他属性。
但我希望基本技术 - 使用绑定来动态控制动画的Opacity
和From
属性 - 很明显。