XAML中的许多类型都具有接受相同格式输入的转换器,但是类型本身不是隐式兼容的。例如,“ 0:0:4”可以是“持续时间”或“关键时间”。有时我想对这些事情使用相同的值。例如,也许我有一个KeyTime在另一个动画的持续时间之后立即开始:
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
问题在于无法表达这些值应该相同的约定。所以我想要的是类似的东西:
<Duration x:Key="Foo">0:0:4</Duration>
<KeyTime x:Key="Bar">0:0:4</KeyTime>
但是我不确定这个语法。我假设我需要为Duration / Keytime调用转换器,但是我发现XAML语法并不总是最直观的。
答案 0 :(得分:2)
代替直接使用StaticResource之类的
KeyTime="{StaticResource AnimationTime}"
您可能经常将Binding与资源作为Source
对象一起使用
KeyTime="{Binding Source={StaticResource AnimationTime}}"
并因此受益于自动类型转换。
一个例子:
<Window.Resources>
<system:String x:Key="AnimationTime">0:0:4</system:String>
<Storyboard x:Key="ExampleStoryboard">
<DoubleAnimation To="1"
Storyboard.TargetProperty="Opacity"
Duration="{Binding Source={StaticResource AnimationTime}}"/>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame
KeyTime="{Binding Source={StaticResource AnimationTime}}"
Value="{x:Static Brushes.Green}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Grid Background="Red" Opacity="0">
<Grid.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard
Storyboard="{StaticResource ExampleStoryboard}"/>
</EventTrigger>
</Grid.Triggers>
</Grid>