Silverlight网格自动大小在画布中不起作用

时间:2010-03-11 03:40:27

标签: silverlight grid canvas autoresize

如何在画布内制作100%的网格宽度?这是一些简单的XAML,但它没有按预期工作。

<Canvas Background="MediumSlateBlue" Width="Auto" Height="Auto" >
    <Grid x:Name="LayoutRoot" MouseMove="MainPage_MouseMove" Background="Beige" >
        <TextBlock x:Name="lblDisplay" Height="24" HorizontalAlignment="Right" VerticalAlignment="Top" Width="128" Text="asdf" ></TextBlock>
    </Grid>
</Canvas>

我不明白为什么我的网格不占用太多空间,因为它可以得到它的手!我甚至尝试添加宽度为100 *的单行和列定义,但我的网格仍然只占用与其包含的标签相同的空间。我们的目标是拥有一个带有网格子画布的画布,占据100%的宽度和高度。这很重要,因为我需要在浏览器调整大小时调整silverlight的大小。

3 个答案:

答案 0 :(得分:3)

Canvas使用绝对定位来展示其内容。它与Windows Forms的工作方式更为相似,因为所有元素都必须指定顶部,左侧,宽度和高度。

您可以通过将Canvas替换为未定义行/列的Grid并使用边距放置子元素来实现类似的功能。

答案 1 :(得分:2)

看起来我在这里找到了解决方案

http://forums.silverlight.net/forums/t/13415.aspx

我调整了代码,以便在调整内容大小时自动调整网格大小。这将允许我使用Canvas.LeftProperty绝对定位元素并保持水平/垂直对齐元素的位置。

我认为只使用网格作为主要布局,但是如果需要为对象设置动画,则无法设置边距。此外,在mousemove事件期间设置边距Left和Top不会将我的元素准确定位到光标位置。

答案 2 :(得分:0)

还要检查以确保您的表单实际上是在拉伸Silverlight应用程序。

<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
      <param name="source" value="clientbin/MyApp.xap"/>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="3.0.40818.0" />
      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
</form>