Gå til innhold

C#: [Løst] Flytte "ankerpunktet" til et objekt til sentret av objektet i WPF?


Anbefalte innlegg

I program under skal jeg vise fram stjerner, jeg har gjort mye dilldall for å få til slik at jeg ikke trenger å forandre noe programatisk for at alt skal orienteres etter midten.

post-147562-0-15869400-1333118177_thumb.png

MEN det er et lite problem til, for som dere ser et de 2 "eksempelstjernene" ikke sentrert men har sine "ankerpunkt" satt oppe i venstre hjørne av hver av dem, jeg ønsker at ankerpunktet skal settes til midtpunktet i ellipsene.

 

kan noen vise meg XAML-en for å gjøre dett?

 

Takk!

 

-frank

Lenke til kommentar
Videoannonse
Annonse

Generelt sett kan du bruke HorizontalAlignment og VerticalAlignment = Center for å sentrere et element, eventuelt HorizontalContentAligment og VerticalContantAlignment på parent element. Det er derimot litt vanskelig å si akkurat hva du må gjøre siden du ikke har postet noe kode.

Lenke til kommentar

Generelt sett kan du bruke HorizontalAlignment og VerticalAlignment = Center for å sentrere et element, eventuelt HorizontalContentAligment og VerticalContantAlignment på parent element. Det er derimot litt vanskelig å si akkurat hva du må gjøre siden du ikke har postet noe kode.

Var ikke et spørsmål som krever kode :hmm:

 

men la meg gi deg kode :) :

<TabItem Header="Starmap" Name="tab_itm_starmap">
<Grid Name="grid_starmap">
	<Canvas Background="Black" Panel.ZIndex="-1500" />
	<Canvas Name="gridPattern" VerticalAlignment="Center" HorizontalAlignment="Center" Background="Blue" Height="1px" Width="1px" Panel.ZIndex="-1100">
		<Canvas Style="{StaticResource myCanvasStyle}" Name="lightyear_grid" Margin="0,0,0,-5.00000000000003" Width="100" Height="100" Canvas.Left="1" Canvas.Top="1" Panel.ZIndex="-1400" />
		<Line X1="1" Y1="1" X2="1" Y2="2000" Stroke="White" StrokeThickness="1" Width="3" Canvas.Left="0" Canvas.Top="-1000" Panel.ZIndex="-900" />
		<Line X1="1" Y1="1" X2="2000" Y2="1" Stroke="White" StrokeThickness="1" Canvas.Left="-1000" Canvas.Top="0" Panel.ZIndex="-900" />
	</Canvas>
	<Canvas Name="starfield" VerticalAlignment="Center" HorizontalAlignment="Center" Background="Blue" Height="1px" Width="1px" Panel.ZIndex="-1000">

	</Canvas>
	<!--Working specimens-->
	<Canvas VerticalAlignment="Center" HorizontalAlignment="Center" Background="Blue" Height="1px" Width="1px" Panel.ZIndex="-900">
		<Ellipse Height="10px" Width="10px" Fill="Yellow" Canvas.Left="0" Canvas.Top="0" FlowDirection="LeftToRight" Stroke="White" StrokeThickness="1" RenderTransformOrigin="0.5, 0.5" Panel.ZIndex="-800" />
		<Ellipse Height="7px" Width="7px" Fill="Red" Canvas.Left="0" Canvas.Top="0" Panel.ZIndex="-800" />
	</Canvas>
</Grid>
</TabItem>

 

Men jeg mener ikke det er relevant for å finne ut av en grei måte å gi et element en Ankerpunkt-offset som gjør at plasserer jeg en ellipse i 0.0 ender det opp i øvre venstre hjørne med 3/4 utenfor containeren.

 

Men jeg tenker at jeg kan crunsh-e posisjonstallene til å kompansere for at ankerpunktet ikke er midtstilt på elementene, (som er ellipser), ved å hente størrelsesdataen så dele denne på 2 og trekker fra verdien på koordinatene, men det legger til ekstra ressurser.

 

Så beste løsningen ville være en property på et element som gjør at man offsetter ankerpunktet til midt i elementet. (valign og Halign er ikke problemet her BTW, for alt er sentrert allerede som du kan se i koden)

 

-frank

Lenke til kommentar

Jeg har ofte opplevd problemer med at ActualWidth og ActualHeight ofte er 0 på akkurat dette.

Du må vel i grunnen lage en transform som translarer innholdet størrelse / 2 og endre transform verdien ved Resize, eventuelt bruke en litt komplisert DataBinder.

Jeg kan gjøre dette uten å bruke ActualWidth og ActualHeight, for jeg setter bredden å høyden mens jeg plasserer ut objektene, så jeg har allerede en variabel med den verdien, så jeg slipper bilig unna men siden jeg har tenkt ut en løsning selv takker jeg alle (2) som har deltatt i å hjelpe og kaller tråden "Løst" ;)

 

-frank

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...