【发布时间】:2015-10-19 17:29:08
【问题描述】:
所以我正在使用 C#/XAML 为 Windows 8 制作应用程序(希望也可以轻松移植到 Windows 10),并且在 UI 方面遇到了一些问题,特别是在画布方面。该应用程序最突出的功能之一是我需要在其中放置对象的大型周历。
在应用程序的编码中,我需要这些东西才能在网格周围移动并改变高度。在测试中,我使用基本的实心矩形执行此操作。尽管它们看起来很丑,但这很容易。我有两种设计可供使用(在图像编辑器中制作),如图所示http://imgur.com/N5Jv16z。
理想情况下,我可以使用该图像中的第二个,尽管事实证明这很困难。首先,我只使用具有半透明背景颜色的边框,然后在左侧有一个实心矩形。如果边界允许两个孩子,这也适用于第二个选项。
所以我找到了画布控件(我以前从未使用过)并试图让它工作,因为它似乎最有希望,尽管我遇到了一个主要问题:它没有子控件的正确对齐选项。 Msdn 说它应该在那里,它不是。当我在 xaml 中键入 canvas.right="5" 时出现错误,因为它说此属性不存在。除此之外,画布似乎实际上并没有边缘。我可以让第二个矩形超出画布的右边缘,它仍然会显示,例如这个图像,其中小正方形的 canvas.left 被赋予 250:http://imgur.com/S46yMhU。
由于大网格中每一列的大小是使用比例完成的,画布本身将具有可变宽度,所以我不能只给第二个矩形一个 canvas.left 属性,因为它只适用于离散像素。我还需要让这些矩形达到画布的整个高度,因为使用后面的代码我只想操作父对象,但是由于没有“底部”的类似原因,让它垂直拉伸不起作用到画布上。
如果这里重要的是我正在处理的 xaml 代码(取出额外的东西):
<Grid x:Name="tableGrid" HorizontalAlignment="Stretch" Margin="0,50,0,0" Grid.Row="1" VerticalAlignment="Stretch" Grid.Column="1">
<Canvas Grid.Column="3" Height="100" Margin="1,1,2,2" Grid.Row="5" Grid.RowSpan="40" VerticalAlignment="Top" Background="#66104A7C">
<Rectangle Fill="#FF104A7C" HorizontalAlignment="Left" Width="5" Height="50"/>
<Rectangle Fill="#FF104A7C" HorizontalAlignment="Left" Width="5" Height="50" Canvas.Left="250" Margin="0,0,5,0"/>
</Canvas>
</Grid>
我没有 canvas.right 属性是否有任何可解决的原因,因为它似乎可以简化一切。在画布中设置矩形的对齐方式不会做任何事情。也许另一个控件会比画布更好?我已经尝试过使用三个矩形(中间一个是半透明的)的 stackpanel,但我无法让它正确地改变宽度。有什么想法吗?
【问题讨论】:
标签: c# wpf xaml canvas windows-8.1