我在Grid.Row和Grid.Column中绘制了一个椭圆 . Row总是高于Column宽 .
我想绘制一个填充网格列宽度的椭圆,以及它的高度使其成为一个完美的圆 .
我还想在上面的椭圆的中心画一个数字 . 基本上以一个以数字为中心的圆圈结束 .
我可以在我的Ellipse和包含数字的TextBlock上轻松设置HorizontalAlignment =“Stretch” . 这照顾了我的宽度 . 但是,即使Grid.Column宽度发生变化,如何使Ellipse和TextBlock的高度始终与其宽度匹配?
这里有一些XAML来说明这一点 . 在下面的XAML中,我希望硬编码的'63'基于Grid.Column宽度或椭圆的宽度范围:
<Ellipse Grid.Row="1" Grid.Column="0" HorizontalAlignment="Stretch" Height="63" Stroke="Black" StrokeThickness="3" VerticalAlignment="Top"/>
<TextBlock Grid.Row="1" Grid.Column="0" Width="63" Height="63" VerticalAlignment="Top" Text="1" TextAlignment="Center" FontSize="42" FontWeight="Bold"/>
感谢你的帮助 . 我最终使用了Herdo的答案 . 只需将HorizontalAlignment设置为Stretch,然后将高度绑定到椭圆的实际宽度即可 . 我对椭圆和文本块做了同样的事情:
<Ellipse HorizontalAlignment="Stretch" Height="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"/>
<TextBlock HorizontalAlignment="Stretch" Height="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"/>
4 回答
假设你有一个
Grid
包含Ellipse,你可以使用ActualWidth
属性,并保持拉伸,而不设置Width
属性 - 允许你使用Ellipse而不引用父容器:请考虑MSDN上
ActualWidth
属性的备注:因此,以下示例代码......
...将导致此行为(宽度/高度将每次更新,容器 - 在这种情况下
Grid
- 更改其布局):您必须将椭圆的高度绑定到网格列宽度,如下所示:
您不需要任何绑定 . 将带有循环
EllipseGeometry
和Stretch="Uniform"
的路径放入公共内部网格中,然后将其放入外部网格中 .我已经跳过了不重要的属性