none
Linien zeichnen - dynamisch vergrössern/verkleinern RRS feed

  • Frage

  • Hallo zusammen.

    Ich habe folgende Anforderung: Ich sollte eine "Zeichnung" erstellen. Diese beinhaltet einige Linien (horizontal und vertikal) und Rechtecke. Das funktioniert auch einwandfrei. D.h. ich habe ein Canvas erstellt und zeichne dort die Linien rein. Was mir nun noch fehlt ist folgendes: Das Canvas liegt in einer Groupbox. Diese wird grösser und kleiner, wenn das Fenster aufgezogen bzw. verkleinert wird. Nun sollte meine "Zeichnung" auch proportional vergrössert bzw. verkleinert werden. Die Texte, die zur Zeichnung hinzugefügt sind (Vermassungen) sollen aber die grösse nicht ändern. Am idealsten wäre es, wenn ich bei den einzelnen Linien und Rechtecken angeben könnte, ob sie sich horizontal und/oder vertikal ändern sollen/dürfen (so ähnlich wie das Anchor-Property bei den Controls auf einer Windows-Form).

    Danke für eure Hilfe.

    Viele Grüsse, Thomas

    Mittwoch, 25. August 2010 08:04

Antworten

  • Hallo Thomas,

    Wenn der Text nicht mitskaliert werden soll, ziehst Du ihn (zum Beispiel) aus der ViewBox heraus, wenn doch, tust Du ihn herein. Zum Beispiel:

    <Window 
     x:Class="WpfDrawLineAndFont.MainWindow"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     Title="MainWindow" Height="350" Width="525">
     <Grid >
     <Viewbox >
     <Canvas Width="160" Height="100" Name="canvas">
    
     <Line X1="10" Y1="10" X2="50" Y2="50" Stroke="Black"
      StrokeThickness="4" />
    
     <Line X1="10" Y1="10" X2="50" Y2="50"
      StrokeThickness="4" Canvas.Left="100">
      <Line.Stroke>
      <RadialGradientBrush 
      GradientOrigin="0.5,0.5" Center="0.5,0.5" 
      RadiusX="0.5" RadiusY="0.5">
      <RadialGradientBrush.GradientStops>
      <GradientStop Color="Red" Offset="0" />
      <GradientStop Color="Blue" Offset="0.25" />
      </RadialGradientBrush.GradientStops>
      </RadialGradientBrush>
      </Line.Stroke>
     </Line>
    
     <Line X1="10" Y1="60" X2="150" Y2="60" Stroke="Black"
      StrokeThickness="4"/>
     </Canvas>
     </Viewbox>
     <TextBox 
     Height="22" Name="textBox1" Width="69" Text="Beispiel Text"/>
     </Grid>
    </Window>
    
    

    [Übersicht über Formen und die grundlegenden Funktionen zum Zeichnen in WPF]
    http://msdn.microsoft.com/de-de/library/ms747393.aspx

    es ist klar, dass es trotzdem Verschiebungs-Probleme geben kann, aber vielleicht reicht es ja schon. Die Anchor-Eigenschaft aus Windows Forms kann man hier in WPF etwa mit der Margin-Eigenschaft vergleichen. Im WPF-Designer kann man direkt an den Control-Seiten den Margin "festklicken/modifizieren":

    [Layout Techniques for Windows Forms Developers - WPF & Silverlight Designer - Site Home - MSDN Blogs]
    http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/04/layout-techniques-for-windows-forms-developers.aspx


    ciao Frank
    • Als Antwort markiert Kehl Thomas Mittwoch, 25. August 2010 20:13
    Mittwoch, 25. August 2010 11:07