2009-05-25 8 views
17

Sto diventando XAML-cieco ho paura. Sto sviluppando un'applicazione MS Surface e ho un'ellisse all'interno di ScatterViewItem (un container che un utente finale può ridimensionare). Vorrei mantenere l'ellisse un cerchio (larghezza == altezza) e tenerlo il più grande possibile (il valore più basso di larghezza/altezza del SVI dovrebbe essere preso per entrambe le proprietà larghezza/altezza dell'ellisse).In XAML, come posso mantenere un'ellisse come un cerchio?

Una soluzione XAML unica (utilizzando trigger di proprietà o simile) è preferibile.

Il vostro aiuto è molto apprezzato come sempre.

risposta

15

Sarebbe un semplice Viewbox fare il trucco? Per esempio.

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

Il Viewbox scalerà il suo contenuto per riempire l'area del Viewbox, e per impostazione predefinita fa il ridimensionamento proporzionale. Gli allineamenti orizzontali e verticali specificati mantengono il centro Ellipse quando non è possibile estenderlo alle dimensioni massime (a causa del ridimensionamento proporzionale).

+1

Briljant! Briljant (ho bisogno di almeno 15 caratteri per dirtielo) –

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

Si potrebbe probabilmente farla franca, non nominare questo se hai fatto un legame relativo pure.

+2

Cosa succede se l'altezza del riquadro di delimitazione è maggiore della larghezza? In tal caso voglio l'altezza = larghezza effettiva. –

+0

In questo caso, è necessario scrivere codice per fare ciò, cioè si desidera eseguire un ingombrante dimensionamento che mantenga le proporzioni (un po 'come il modo in cui un riproduttore di filmati lo fa, che cambia il lato su cui basa le sue dimensioni in base a quale asse è più grande) –

+0

Questo è quello che pensavo. Peccato, ma nessun problema. Grazie –

28

mi sono imbattuto su questa questione a pochi minuti fa e ho trovato una soluzione molto migliore rispetto @ Paolo Betts (mi piacerebbe commentare la sua risposta se potessi, ma non posso)

Si può semplicemente utilizzare <Ellipse Stretch="Uniform" /> per ottenere un cerchio.

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

+2

Questa è la soluzione migliore di gran lunga. – flyingfisch

Problemi correlati