在Thread.Sleep()之前更新页面布局

时间:2011-12-09 13:33:27

标签: c# silverlight windows-phone-7

我的网页上有TextBlock Textnull(“”)。当我单击一个按钮时,我想更改此TextBlock的文本值,暂停半秒,然后将TextBlock一个像素一次移动到某个点。

我尝试使用Thread.Sleep(),但到目前为止,我遇到了问题。我点击按钮,UI线程暂停半秒钟,然后TextBlock突然出现并开始移动。我希望它在我点击按钮后立即显示。

P.S。:我知道Thread.Sleep()不起作用。我愿意使用任何有用的东西。

2 个答案:

答案 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)

尝试使用故事板而不是编写代码来执行此操作。我认为它会比手动方法更好。