我的网页上有TextBlock
Text
值null
(“”)。当我单击一个按钮时,我想更改此TextBlock
的文本值,暂停半秒,然后将TextBlock
一个像素一次移动到某个点。
我尝试使用Thread.Sleep()
,但到目前为止,我遇到了问题。我点击按钮,UI线程暂停半秒钟,然后TextBlock
突然出现并开始移动。我希望它在我点击按钮后立即显示。
P.S。:我知道Thread.Sleep()不起作用。我愿意使用任何有用的东西。
答案 0 :(得分:4)
故事板和动画是在屏幕上移动项目的首选机制。首先,它们经过优化,可以与手机线程模型配合使用。另一方面,将你的UI线程置于睡眠状态是一个坏主意,因为你正在制作一个无响应的应用程序。
以下是如何使用故事板移动texblock的快速示例。
用户界面元素。
<Grid
x:Name="ContentPanel"
Grid.Row="1"
Margin="12,0,12,0">
<TextBlock
Margin='79,263,177,307'
Name='textBlock1'
Text='TextBlock'
RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
<CompositeTransform />
</TextBlock.RenderTransform>
</TextBlock>
<Button
Content="Button"
Height="80"
Margin="116,0,188,144"
VerticalAlignment="Bottom"
Click='Button_Click' />
</Grid>
故事板,在页面资源部分中定义。
<phone:PhoneApplicationPage.Resources>
<Storyboard
x:Name="MoveTextBlockStoryboard">
<DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
Storyboard.TargetName="textBlock1">
<EasingDoubleKeyFrame
KeyTime="0"
Value="0" />
<EasingDoubleKeyFrame
KeyTime="0:0:1.1"
Value="120" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
Storyboard.TargetName="textBlock1">
<EasingDoubleKeyFrame
KeyTime="0"
Value="0" />
<EasingDoubleKeyFrame
KeyTime="0:0:1.1"
Value="-105" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
更改文字并启动故事板的代码。
private void Button_Click(object sender, RoutedEventArgs e) {
textBlock1.Text = "new text";
MoveTextBlockStoryboard.Begin();
}
答案 1 :(得分:3)
尝试使用故事板而不是编写代码来执行此操作。我认为它会比手动方法更好。