WPF kresba, která se táhne bez natahování pera

hlasů
6

Musím k tomu několik jednoduchých čar v rámci kontroly hranic (nebo podobně), které vždy táhnou na hranice hranice. Existuje způsob, jak protáhnout čáry jen ne však jeho pero? Bez účasti hodně C #?

V této verzi řádky protáhnout:

<Border>
   <Border.Background>
      <DrawingBrush>
         <DrawingBrush.Drawing>
            <DrawingGroup>
               <GeometryDrawing Brush=Red>
                  <GeometryDrawing.Geometry>
                     <GeometryGroup>
                        <RectangleGeometry Rect=0,0 100,1000 />
                        <LineGeometry  StartPoint=0,0 EndPoint=100,1000/>
                        <LineGeometry  StartPoint=100,0 EndPoint=0,1000/>
                     </GeometryGroup>
                  </GeometryDrawing.Geometry>
                  <GeometryDrawing.Pen>
                     <Pen Thickness=20 Brush=Black/>
                  </GeometryDrawing.Pen>
               </GeometryDrawing>
            </DrawingGroup>
         </DrawingBrush.Drawing>
      </DrawingBrush>
   </Border.Background>
</Border>

Nejlepším řešením jsem přijít s je toto:

<Border>
   <Grid>
      <Path Stretch=Fill Fill=Red Stroke=Black StrokeThickness=4  Data=M0,0 L100,0 100,1000 0,1000 z />
      <Path Stretch=Fill Stroke=Black StrokeThickness=4  Data=M 0,0 L0,0 100,1000 />
      <Path Stretch=Fill Stroke=Black StrokeThickness=4  Data=M 100,0 L100,0 0,1000 />
   </Grid>
</Border>

Ale není lepší řešení? Která nezahrnuje další mřížku?

Položena 26/08/2009 v 22:18
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
5

Udělal jsem to škálováním cestu v údajích, nikoli na vizuální složku.

  1. Umístěte cesty v plátně.
  2. Nastavit path.Data do geometrie představující data v procentech logické řady.
  3. Nastavit path.Data.Transform na ScaleTransform s a scaleY vázané na skutečné šířky a výšky.
Odpovězeno 06/12/2010 v 23:14
zdroj uživatelem

hlasů
4

Uvnitř čáry, můžete svázat šířku (nebo výšku, v závislosti na tom, jakým způsobem jsou kreslení čáry), jako u nadřazeného kontejneru, aby se dosáhlo toho, co chcete.

    <Grid x:Name="Grid" Margin="10">
        <Border BorderBrush="Black" BorderThickness="1"  />
        <Line X1="0" X2="{Binding ElementName=Grid, Path=ActualWidth}" Y1="1" Y2="1" Stroke="Red" Margin="0,10,0,0" />
        <Line X1="0" X2="{Binding ElementName=Grid, Path=ActualWidth}" Y1="1" Y2="1" Stroke="Green" Margin="0,30,0,0" />
        <Line X1="0" X2="{Binding ElementName=Grid, Path=ActualWidth}" Y1="1" Y2="1" Stroke="Blue" Margin="0,50,0,0" />
    </Grid>

Edit: Tady je další způsob, jak bez použití vazba

<Border BorderBrush="Black" BorderThickness="1" >
    <Path Stroke="Red" StrokeThickness="1" Data="M0,0 1,0Z" Stretch="Fill" />
</Border>
Odpovězeno 26/08/2009 v 22:33
zdroj uživatelem

hlasů
1

Žádné, že vím. Ale pokud děláte něco opravdu extravagantní, je to opravdu není mnoho úsilí potlačit OnRendera vyvodit sami:

public class CustomBorder : Border
{
    protected override void OnRender(DrawingContext dc)
    {
        base.OnRender(dc);

        dc.DrawLine(new Pen(BorderBrush, BorderThickness.Top), new Point(0, 0), new Point(ActualWidth, ActualHeight));
    }
}

Výsledek:

zadejte popis obrázku zde

Odpovězeno 26/08/2009 v 22:25
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more