Domanda

Sto provando a fare qualche applicazione di disegno e ottengo strani risultati nella mia "modalità di selezione". Se disegno un rettangolo e " selezionalo " RenderSize restituisce la dimensione corretta per esso, ma se è selezionata Linea RenderSize restituisce Dimensione che ha Larghezza impostata come Linea.X2 e Altezza impostata come Linea.Y2. Ad esempio: La riga inizia con X1 = 50, Y1 = 50, termina con X2 = 130, Y2 = 90, RenderSize restituisce Dimensione con Larghezza = 130 e Altezza = 90. La mia selezione contiene elementi di tipo UIElement quindi non lo so ( e davvero non dovrebbe importare) quale forma è selezionata per rendere la mia modalità di selezione quanto più generica possibile e vorrei disegnare un riquadro di selezione mentre l'utente sposta la forma selezionata.

Ho provato a google il problema ma non ho trovato nulla di rilevante, quindi forse potresti aiutarmi con esso. È perché Rectangle ha la posizione impostata da Canvas mentre Line ha i suoi punti impostati esplicitamente?

È stato utile?

Soluzione

Il motivo per cui stai ricevendo 130x90 è per il motivo che hai citato. Un rettangolo in WPF è senza posizione, è solo un'altezza / larghezza, quindi i due valori di dimensione sono uguali.

Tuttavia, una linea definita da punti definisce necessariamente uno scostamento richiesto rispetto all'origine, e quindi lo scostamento è incluso nel rettangolo di selezione.

Si noti inoltre che è possibile continuare a utilizzare le proprietà Canvas.Top/Left con l'oggetto Line per spostarlo ulteriormente, ad es .:

  <Canvas>
    <Line X1="50" X2="130" Y1="50" Y2="90" StrokeThickness="1" Stroke="Blue" Canvas.Top="50" Canvas.Left="30"></Line>
  </Canvas>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top