我试图让ContentControl
应用ContentThemeTransition
,其中内容将是一个字符串,因此当字符串通过绑定更改时,新字符串将会生成动画。我可以&将ContentThemeTransition
与TextBlock
一起使用,因为这并非来自ContentControl
。
以下是一些显示问题的示例XAML。如果我编辑文本框中的文本(它代表我的ViewModel中ContentControl
真正绑定的文本),我希望ContentControl
中显示的文本可以动画显示,但它不会#39 ;吨
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" x:Name="text" Text="Hello" Width="100" Height="30"/>
<ContentControl Grid.Row="1" Width="100" Height="100" Content="{Binding ElementName=text , Path=Text}">
<ContentControl.Transitions>
<TransitionCollection>
<ContentThemeTransition HorizontalOffset="40"/>
</TransitionCollection>
</ContentControl.Transitions>
</ContentControl>
</Grid>
我做错了什么?
非常感谢您的任何帮助。
更新:
好的,现在到了某个地方。如果将ContentControl
XAML替换为
<ContentPresenter Background="Black" Foreground="Red" Grid.Row="1" Width="100" Height="100" Content="{Binding ElementName=text , Path=Text}">
<ContentPresenter.ContentTransitions>
<TransitionCollection>
<ContentThemeTransition VerticalOffset="-100"/>
</TransitionCollection>
</ContentPresenter.ContentTransitions>
</ContentPresenter>
然后它的工作原理。奇怪的是,如上所述,VerticalOffset = -100,新值在ContentControl
之外设置为动画。它在控制范围之外可见。任何人都知道如何改变事物,因此动画只出现在ContentPresenter
?
答案 0 :(得分:1)
经过我的测试,您的第一个<ContentThemeTransition HorizontalOffset="40"/>
和第二个<ContentThemeTransition VerticalOffset="-100"/>
都可以正常工作,但只是第一次,您可以放大HorizontalOffset
进行测试并检查它是否有效。
由于您希望每次更改文本时动画都能正常工作,我认为您需要创建一个直接定位Text
TextBlock
的动画,而不是定位Content
} ContentControl
。
在这种情况下,XAML Behaviors将是一个好帮手。您可以参考@Jerry Nixon - MSFT的答案:How to animate TextBlock when its value changes in WinRT XAML?
<强>更新强>
我的错误,我只是注意到您已将HorizontalOffset
更改为VerticalOffset
。您实际上也已将ContentControl
更改为ContentPresenter
。
根据UWP的UI坐标,由于您的动画定位ContentPresenter
,因此请考虑ContentPresent
的左上角是(0,0)。当你设置<ContentThemeTransition VerticalOffset="-100"/>
时,它会从向上(0,-100)转换回(0,0)并且它肯定会在ContentPresent
之外生成动画,我认为它的设计是这样的,而且我们无法改变它。在这里,我只能建议将过渡从低到高修改为<ContentThemeTransition VerticalOffset="100"/>
,这会有所帮助,但最终会改变你的动画,所以我不认为这是一个好方法。