我有TextBlock
我通过Canvas
在DoubleAnimation()
内移动。在封闭的窗口SizeChanged
事件中,我可以正确调整TextBlock.FontSize
和内部Canvas
的大小,但是我在TextBlock
内正确定位Canvas
时遇到问题{1}}。 (我试图做某种形式的Canvas.SetTop(NameQueueTextBlock, <newVal>)
,但这不起作用。)
<Canvas Grid.Column="1" ClipToBounds="True">
<Canvas Name="NameQueueCanvas" ClipToBounds="True" Height="79" Width="309">
<TextBlock Canvas.Top="0" Name="NameQueueTextBlock" FontSize="19" Text=" "/>
</Canvas>
</Canvas>
答案 0 :(得分:1)
我猜你的DoubleAnimation
是罪魁祸首。
如果保持Canvas.Top
的结束值(默认值),同时移动TextBlock
根据WPF优先级系统Canvas.Top
的任何未来更新将“显示”为忽略。
<强>解决方案:强>
开关
Canvas.SetTop(NameQueueTextBlock, /*newVal*/);
与
NameQueueTextBlock.BeginAnimation(Canvas.TopProperty, null);
Canvas.SetTop(NameQueueTextBlock, /*newVal*/);
你应该排序。
替代方法:
假设您Storyboard
被称为sb
,请在致电sb.Begin();
之前
添加类似:
sb.Completed += (o, args) => {
var finalVal = Canvas.GetTop(NameQueueTextBlock);
NameQueueTextBlock.BeginAnimation(Canvas.TopProperty, null);
Canvas.SetTop(NameQueueTextBlock, finalVal);
};
我更喜欢这个,因为它可以让您无法跟踪哪个代码片段可能会首先更改Canvas.Top
上的TextBlock
并使用null
重置该属性事前动画。