Mar*_*tin 3 c# xaml windows-runtime actualwidth actualheight
我有Canvas一个TextBlock像这样:
<Canvas x:Name="ContentPanel" Grid.Row="1" DoubleTapped="ContentPanel_DoubleTapped">
<TextBlock x:Name="WordBlock" FontSize="226.667" FontFamily="Segoe UI Semilight" TextAlignment="Center"
RenderTransformOrigin="0.5, 0.5">
<TextBlock.RenderTransform>
<TranslateTransform x:Name="translate"/>
</TextBlock.RenderTransform>
</TextBlock>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
我的应用程序是这样的,当用户导航到此页面时,TextBlock将以中心为中心Canvas,如果TextBlock宽度大于画布的宽度,则会出现选框动画:
private void SetAnimation()
{
Canvas.SetLeft(WordBlock, (ContentPanel.ActualWidth - WordBlock.ActualWidth) / 2);
Canvas.SetTop(WordBlock, (ContentPanel.ActualHeight - WordBlock.ActualHeight) / 2);
if (WordBlock.ActualWidth > ContentPanel.ActualWidth)
{
MarqueeAnimation.From = WordBlock.ActualWidth;
MarqueeAnimation.To = -WordBlock.ActualWidth;
MarqueeAnimation.Duration = new Duration(new TimeSpan(0, 0, 10));
MarqueeBoard.Begin();
}
}
Run Code Online (Sandbox Code Playgroud)
此方法称为OnNavigatedTo.我无法弄清楚为什么TextBlock不会居中,因为ActualHeight和ActualWidth属性总是以0.0的形式返回.我不想放置固定大小,因为这是一个Windows应用商店应用程序,并希望它可以在不同的屏幕尺寸上进行扩展.
有任何想法吗?我被卡住了.
当OnNavigatedTo被调用时,我不相信页面实际上已被绘制.在尝试调整大小和重新排列时,我有类似的困惑.答案似乎是等到页面加载后再进行计算:
public ChallengePage()
{
this.InitializeComponent();
this.Loaded += ChallengePage_Loaded;
}
void ChallengePage_Loaded(object sender, RoutedEventArgs e)
{
*Do your calculations which use ActualWidth and ActualHeight in here*
}
Run Code Online (Sandbox Code Playgroud)
你需要我相信的东西.将Loaded处理程序添加到页面的初始化中,然后可以从那里调用SetAnimation.
| 归档时间: |
|
| 查看次数: |
3496 次 |
| 最近记录: |