2009-05-25 79 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