2009-05-25 83 views
17

我很害怕XAML盲人。我正在开发MS Surface应用程序,并且在ScatterViewItem(最终用户可以调整大小的容器)内部有一个椭圆。我想让椭圆保持一个圆(宽度==高度)并尽可能大(对于椭圆的宽度/高度属性,应该为SVI的宽度/高度的最小值)。在XAML中,我如何保持椭圆是一个圆?

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

您的帮助一如既往地倍受赞赏。

回答

15

简单的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保持居中,因为它无法拉伸到全尺寸(由于比例缩放)。

+1

Briljant! Briljant(我至少需要15个字符才能告诉你) – 2009-05-27 07:45:04

5
<Ellipse x:Name="anEllipse" Width={Binding Path=ActualHeight ElementName=anEllipse} /> 

如果你做了相对绑定,你也可以不用命名。

+2

如果边界框的高度大于宽度会怎样?在那种情况下,我想要Height = ActualWidth。 – 2009-05-26 10:14:57

+0

在这种情况下,您需要编写代码来执行此操作 - 即,您要执行贪婪的尺寸调整,以保持纵横比(类似于电影播放器​​的操作方式,根据哪个轴切换其基于其尺寸的哪一侧更大) – 2009-05-26 15:38:55

28

我偶然发现在这个问题上几分钟前,发现比@保罗贝茨一个更好的解决方案(我对他的回答评论,如果我可以,但我不能)

您可以简单地使用<Ellipse Stretch="Uniform" />得到一个圈子。

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