无法使用C#调整Canvas大小

时间:2015-03-16 16:53:30

标签: c# xaml canvas windows-phone-8.1

非常简单的问题:如果我在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.ActualHeightMyCanvas.ActualWidth属性时,两个维都为零,因此我的画布中没有显示任何内容。

1 个答案:

答案 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.LeftCanvas.Top来排列控件,例如X和Y.