2012-04-13 5 views
6

Ich habe ein WPF-Steuerelement.die Flanke von WPF

Ich brauche im Hintergrund ein Kreuz haben, wie folgt aus:
enter image description here

Danach, ich in der Lage sein würde andere Kontrollen hinzufügen meine „gekreuzt“ Hintergrund: enter image description here

Wie sollte Ich zeichne das Kreuz, wissend, dass das Kreuz, wenn ich die Kontrolle rezize, seiner Größe folgen sollte?

Antwort

11

schnelle und schmutzige Weise zeichnen machen sind Linien zu verwenden und deren Koordinaten an die WID binden th und Höhe eines Elterncontainers. Etwas wie folgt aus:

<Grid Name="parent"> 
    <Line X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="{Binding ElementName='parent', Path='ActualHeight'}" 
      Stroke="Black" StrokeThickness="4" /> 
    <Line X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="0" Stroke="Black" StrokeThickness="4" /> 
</Grid> 

ein Gitter verwenden als die Eltern bedeutet, dass alle anderen Kinder an das Netz nach den Zeilen hinzugefügt oben auf den Linien erscheinen:

<Grid Name="parent"> 
    <Line X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="{Binding ElementName='parent', Path='ActualHeight'}" 
      Stroke="Black" StrokeThickness="4" /> 
    <Line X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="0" Stroke="Black" StrokeThickness="4" /> 
    <Label Background="Red" VerticalAlignment="Center" HorizontalAlignment="Center">My Label</Label> 
</Grid> 
+0

+1 für die Liebe zum Detail :) –

0
<Line X1="10" Y1="10" X2="50" Y2="50" Stroke="Black" StrokeThickness="4" /> 
    <Line X1="10" Y1="50" X2="50" Y2="10" Stroke="Black" StrokeThickness="4" /> 

, wenn Sie sich fragen, wo die x- und y-Werte kommen, nur kartesisch ziehen und stecken in

line 1 - point 1:(10,10), point 2:(50,50) 
line 2 - point 1:(10,50), point 2:(50,10) 

ref auf Formen http://msdn.microsoft.com/en-us/library/ms747393.aspx

legte das Etikett nach/Below the Line Elemente in XAML, die es über die Leitungen

+1

BTW, ich Ihren Namen nur bemerkt, bin ich ursprünglich aus Chisinau, kleine Welt, wie auch immer, hoffen, dass diese bekommt man begonnen –

+1

nicht die Größe der Fall ist. –

+1

bah, das ist richtig darüber vergessen, ich werde das in etwas hinzufügen –

5

Eine andere Möglichkeit, dieses Problem zu lösen ist, setzen alles nur in einem Viewbox und verwenden Stretch="fill". Es wird die Größenanpassung für Sie übernehmen und dabei die richtigen Proportionen beibehalten. In diesem Fall müssen Sie keine Datenbindung verwenden.

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 
    <Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stretch="Fill"> 
     <Grid> 
      <Line X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" StrokeThickness="1" /> 
      <Line X1="0" Y1="100" X2="100" Y2="0" Stroke="Black" StrokeThickness="1" /> 
     </Grid> 
    </Viewbox> 
    <Label Background="Red" VerticalAlignment="Center" HorizontalAlignment="Center">My Label</Label> 
</Grid> 
+3

Eine Sache zu beachten mit der ViewBox ist, dass es auch die Dicke der Linien vergrößern wird (d. H., Wenn Sie die Größe Ihres Fensters ändern, werden die Linien dicker). Ob das wünschenswert ist oder nicht, ist eine separate Frage. –

+0

@MattBurland Das stimmt. Danke, dass du es erwähnt hast. –

1

Die Antwort von Matt Burland meine App ständig gemacht blinkt (weil ich den Verweis auf ‚Eltern‘ annehmen, der Größe verändert es ... und Größe verändert dann die Linien, etc ...)

So habe ich Stretch = Füllen und unterdrücken Sie den Verweis auf "Eltern". Funktioniert jetzt ganz gut.

<Line x:Name="Line1" Visibility="Hidden" Stroke="Red" StrokeThickness="2" Stretch="Fill" 
       X1="0" Y1="0" X2="1" Y2="1" /> 
<Line x:Name="Line2" Visibility="Hidden" Stroke="Red" StrokeThickness="2" Stretch="Fill" 
       X1="0" Y1="1" X2="1" Y2="0" /> 

Dies ist eine Mischung aus dieser Lösung ist, und diese one

Verwandte Themen