在 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 更好的解决方案(如果可以的话,我会评论他的回答,但我不能)
您可以简单地使用<Ellipse Stretch="Uniform" />
来获得一个圈子。
来源:http://forums.silverlight.net/t/160615.aspx
【讨论】:
这是迄今为止最好的解决方案。 为了让它与 WPF 一起工作,我必须使这个UniformToFill
。
@Mitch 仅当包含椭圆的父级未提供椭圆的高度/宽度并且您未在椭圆上指定高度或宽度时。不过好点,我不知道UniformToFill
存在。以上是关于在 XAML 中,如何将椭圆保持为圆形?的主要内容,如果未能解决你的问题,请参考以下文章