非常简单的问题:如果我在Windows Phone 8.1应用程序中声明XAML中的画布,如下所示:
<Canvas x:Name="OptionsCanvas" Width="400" Height="450" VerticalAlignment="Top" Background="White" PointerMoved="OptionsCanvas_PointerMoved">
它工作正常,但我想让我的应用程序适应不同屏幕尺寸的手机。所以我使用Window.Current.Bounds
获取屏幕大小,并将画布尺寸设置为页面构造函数中c#中总屏幕大小的比例,如下所示:
Point screenRes = new Point();
double scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
ScreenRes.X = Window.Current.Bounds.Width * scaleFactor;
ScreenRes.Y = Window.Current.Bounds.Height * scaleFactor;
MyCanvas.Width = ScreenRes.X * 0.5;
MyCanvas.Height = ScreenRes.Y * 0.7;
但这似乎不起作用。运行上述代码后检查MyCanvas.ActualHeight
和MyCanvas.ActualWidth
属性时,两个维都为零,因此我的画布中没有显示任何内容。
答案 0 :(得分:1)
我希望您知道Canvas
没有剪辑其子女。因此,即使其大小为0 x 0,内部的所有控件都将可见。我建议你使用一些不同的控件来显示更灵活的背景,比如Border
并保持画布原样(默认为0 x 0大小)。所以你的代码看起来像这样:
<Border x:Name="OptionsBorder"
Width="400"
Height="450"
VerticalAlignment="Top"
Background="White"
PointerMoved="OptionsCanvas_PointerMoved">
<Canvas x:Name="OptionsCanvas"
VerticalAlignment="Top"
HorizontalAlignment="Left" />
</Border>
所以现在你可以改变OptionsBorder
的大小,而不是关心画布。 Canvas只有一个优势 - 您可以使用Canvas.Left
和Canvas.Top
来排列控件,例如X和Y.