Раскадровки и анимации являются предпочтительным механизмом перемещения элементов на экране. Во-первых, они оптимизированы для работы с моделью потоковой передачи телефонов. С другой стороны, перенос потока пользовательского интерфейса в режим сна - это плохая идея, так как вы делаете невосприимчивое приложение.
Вот краткий пример того, как переместить 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, вот как вы это делаете. Перемещение элемента по странице вручную (в потоке пользовательского интерфейса!) - плохая идея. Я бы предложил против этого. – Joe
Он работает как шарм. Благодаря! Извините за поздний знак в качестве ответа. –