在 XAML 中,如何将椭圆保持为圆形?

Posted

技术标签:

【中文标题】在 XAML 中,如何将椭圆保持为圆形?【英文标题】:In XAML, how can I keep an ellipse being a circle? 【发布时间】:2010-10-28 19:42:38 【问题描述】:

恐怕我对 XAML 视而不见。我正在开发一个 MS Surface 应用程序,我在 ScatterViewItem 中有一个椭圆(最终用户可以调整大小的容器)。我想将椭圆保持为圆形(宽度 == 高度)并使其尽可能大(对于椭圆的宽度/高度属性,应采用 SVI 的宽度/高度的最低值)。

首选仅 XAML 的解决方案(使用属性触发器或类似方法)。

我们一如既往地感谢您的帮助。

【问题讨论】:

【参考方案1】:

一个简单的Viewbox 可以解决问题吗?例如

<Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    HorizontalAlignment="Center"
    VerticalAlignment="Center">
    <Canvas Width="100" Height="100">
        <Ellipse Fill="Red" Width="100" Height="100" />
    </Canvas>
</Viewbox>

Viewbox 将缩放其内容以填充Viewbox 的区域,默认情况下按比例缩放。当Ellipse 无法拉伸到全尺寸时(由于按比例缩放),指定的水平和垂直对齐方式使Ellipse 居中。

【讨论】:

太棒了!精彩(我至少需要 15 个字符才能告诉你)【参考方案2】:
<Ellipse x:Name="anEllipse" Width=Binding Path=ActualHeight ElementName=anEllipse />

如果你也做了一个相对绑定,你可能不命名它。

【讨论】:

如果边界框的高度大于宽度怎么办?在那种情况下,我想要 Height=ActualWidth。 在这种情况下,您需要编写代码来执行此操作 - 即您想要进行贪婪的大小调整以保持纵横比(有点像电影播放器​​的做法,切换它的基础它的大小取决于哪个轴更大) 我就是这么想的。太糟糕了,但没问题。谢谢【参考方案3】:

几分钟前我偶然发现了这个问题,并找到了比@Paul Betts 更好的解决方案(如果可以的话,我会评论他的回答,但我不能)

您可以简单地使用&lt;Ellipse Stretch="Uniform" /&gt; 来获得一个圈子。

来源:http://forums.silverlight.net/t/160615.aspx

【讨论】:

这是迄今为止最好的解决方案。 为了让它与 WPF 一起工作,我必须使这个UniformToFill @Mitch 仅当包含椭圆的父级未提供椭圆的高度/宽度并且您未在椭圆上指定高度或宽度时。不过好点,我不知道UniformToFill 存在。

以上是关于在 XAML 中,如何将椭圆保持为圆形?的主要内容,如果未能解决你的问题,请参考以下文章

怎么把DIV做成椭圆形

UITableViewCell 中的圆形按钮

为 tableview 单元格图像创建圆形图片

如何在 UIImageview 中绘制椭圆形

UIView contentstretch 将圆形更改为椭圆形,而不是药丸形状

如何创建一个半椭圆形(弯曲一条线)