2009-05-25 14 views
17

Ben XAML-kör korkuyorum alıyorum. Bir MS Surface uygulaması geliştiriyorum ve bir ScatterViewItem (bir son kullanıcının yeniden boyutlandırabileceği bir kapsayıcı) içinde bir elipsim var. Elipsi bir daire (genişlik == yükseklik) tutmak ve mümkün olduğunca büyük tutmak istiyorum (elipsin genişlik/yükseklik özellikleri için SVI'nın en geniş/en yüksek değeri alınmalıdır). Bir XAML tek çözümünün (özellik tetikleyicileri veya benzerleri kullanılarak) tercih edilmesi tercih edilir.XAML'de, bir elipsin daire şeklinde olmasını nasıl sağlayabilirim?

Yardımınız her zaman olduğu gibi çok takdir edilmektedir.

cevap

15

Basit bir Viewbox ister misiniz? Örneğin.

<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> 

ViewboxViewbox alanını doldurmak için içeriğini ölçeklemek ve varsayılan olarak orantılı ölçeklendirme yapar olacaktır. Belirtilen yatay ve dikey hizalamalar, Ellipse'u, tam boyuta (orantılı ölçeklendirme nedeniyle) uzatılamayacağı zaman ortalar.

+1

Briljant! Briljant (En azından size söylemek için en az 15 karaktere ihtiyacım var) –

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

Ayrıca göreceli bir bağ kurarsanız, bunu adlandırmaktan kaçınabilirsiniz.

+2

Sınırlama kutusunun yüksekliği genişlikten fazlaysa ne olacak? Bu durumda Height = ActualWidth değerini istiyorum. –

+0

Bu durumda, bunu yapmak için kod yazmanız gerekir - yani en boy oranını koruyan açgözlü boyutlandırma yapmak istediğinizde (bir film oynatıcısının yaptığı gibi, hangi tarafın hangi eksene göre hangi tarafa dayandığını değiştirir büyüktür) –

+0

Ben de öyle düşündüm. Çok kötü, ama sorun değil. Teşekkürler –

28
Birkaç dakika önce Bu soru üzerine tökezledi ve basitçe <Ellipse Stretch="Uniform" /> kullanabilirsiniz @ Paul Betts çok daha iyi bir çözüm (Ben onun cevabını üzerinde yorum istiyorum eğer olabilir, ama yapamıyorum)

bulundu

bir daire almak için.

Kaynak: http://forums.silverlight.net/t/160615.aspx

+2

Bu, bugüne kadarki en iyi çözümdür. – flyingfisch

İlgili konular