Domanda

Devo implementare un Canvas che ridimensiona il suo contenuto in base alle sue dimensioni. So che c'è Viewbox , che ridimensiona tutto al suo interno. Tuttavia non posso usarlo, perché alcuni elementi hanno una dimensione fissa e non possono essere ridimensionati.

Inoltre, come posso associare la dimensione del Canvas all'elemento genitore (ad esempio una finestra ridimensionabile). C'è sizeToContent per Windows, voglio che le dimensioni si adattino esattamente al contrario. Inoltre, l'area di disegno utilizza alcuni disegni in base alle dimensioni dell'elemento di hosting, come viene attivato il ridisegno e come posso assicurarmi che disegni solo se ottiene una dimensione valida (o minima)?

È stato utile?

Soluzione

Se non specifichi alcuna larghezza o altezza sulla tela, utilizza automaticamente tutto lo spazio disponibile. Questo perché VerticalAlignment e HorizontalAlignment predefiniti sono impostati su Stretch .

Cosa intendi per tela che ridimensiona i suoi contenuti in base alle sue dimensioni senza ridimensionare tutti i contenuti poiché alcuni hanno dimensioni fisse?

Aggiorna dopo i commenti

Se il tuo algoritmo di disegno ridimensiona il contenuto in base all'altezza e alla larghezza della tela, tutto ciò che devi fare è ridimensionare la tela per adattarla all'area in cui credo? In tal caso, rimuovi semplicemente i valori di altezza / larghezza codificati e la tela verrà ridimensionata per adattarsi al contenitore.

Potrebbe essere necessario utilizzare ActualHeight / ActualWidth invece di Height / Width nell'algoritmo di disegno dopo questo. ActualHeight / ActualWidth restituisce i valori che il contenitore di layout fornirà alla tela in modo che rappresentino i valori con cui viene disegnata la tela.

Altri suggerimenti

Penso che puoi trovare le risposte a tutte le tue domande nel mio London Underground demo .

Lo sto facendo dalla memoria, ma se ricordo bene una finestra usa un pannello o una tela come parte del suo ControlTemplate (in cui si trova ContentPresenter), il che significa che una tela posizionata direttamente in una finestra avrà problemi di ridimensionamento automatico come potrebbe essere altrove. Esistono alcuni modi di base per risolvere questo problema.

1 Scrivi un nuovo ControlTemplate da usare per la tua finestra. :(
2 Posiziona i tuoi contenuti direttamente nella Finestra anziché in una tela all'interno della Finestra.: /
3 Eseguire un'associazione per nome. :)

<MyWindow x:Name="topWindow">
    <Canvas x:Name="topCanvas" Width="{Binding ElementName=topWindow, Path=ActualWidth}" Height="{Binding ElementName=topWindow, Path=ActualHeight}">
        ...Content...
    </Canvas>
</MyWindow>

(In questo caso, spesso associo le griglie all'interno di Canvas in questo modo, quindi posso facilmente animare gli oggetti che si spostano da una posizione della griglia all'altra.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top