zoukankan      html  css  js  c++  java
  • [转]Dynamic and static Rectangle in WPF

    此文转载自:Raj Kumar

    In geometry, a rectangle is defined as a quadrilateral where all four of its angles are right angles (90 degrees).

    The <Rectangle /> element of XAML draws a rectangle. The Height and Width attributes represent the height and width of the rectangle. The Stroke and Stroke Thickness represents the color and thickness of the rectangle boundary.

    In this example, I am showing you how to draw a rectangle static and dynamic. Static rectangle means the rectangle is drawn totally based on XAML code while dynamic rectangle means, I create the rectangle using code in the code behind file.

    1. This code shows how to draw a rectangle:

      <!--static rectangle -->
      <Canvas Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Margin="50,20,0,0">
            <Rectangle Width="150" Height="150" Stroke="Red" Fill="Gray" StrokeThickness="2"></Rectangle>
      </
      Canvas>
      <
      TextBlock Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center">Static Rectangle</TextBlock>

      Draw a rectangle dynamically:

      <!--dynamic rectangle -->
      <Canvas x:Name="canvas" Grid.Column="1" Grid.Row="0" Margin="50,20,0,0"></Canvas>
      <
      TextBlock Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center">Dynamic Rectangle</TextBlock>

      private
      void DrawRectangle()
      {

                  Rectangle exampleRectangle = new Rectangle();
                  exampleRectangle.Width = 150;
                  exampleRectangle.Height = 150;
                  // Create a SolidColorBrush and use it to
                  // paint the rectangle.
                  SolidColorBrush myBrush = new SolidColorBrush(Colors.Green);
                  exampleRectangle.Stroke = Brushes.Red;
                  exampleRectangle.StrokeThickness = 4;
                  exampleRectangle.Fill = myBrush;
                  canvas.Children.Insert(0, exampleRectangle);
       }

      Result looks like this:


      Figure 1.

       

    2. This code shows how draw rectangle with Radius.
       

      <!--static rectangle with radius -->

              <Canvas Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="50,20,0,0">

                  <Rectangle Width="150" Height="150" RadiusX="10" RadiusY="10" Stroke="Red" Fill="Gray" StrokeThickness="2"></Rectangle>

              </Canvas>

              <TextBlock Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center">Static Rectangle Radius</TextBlock>

      Make dynamically:

      <!--dynamic rectangle with radius -->
              <Canvas x:Name="canvas1" Grid.Column="1" Grid.Row="1" Margin="50,20,0,0"></Canvas>
              <TextBlock Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center">Dynamic Rectangle Radius</TextBlock>

       

      private void RadiusRectangle()

              {

                  Rectangle exampleRectangle1 = new Rectangle();

                  exampleRectangle1.Width = 150;

                  exampleRectangle1.Height = 150;

                  exampleRectangle1.RadiusX = 10;

                  exampleRectangle1.RadiusY = 10;

                  // Create a SolidColorBrush and use it to

                  // paint the rectangle.

                  SolidColorBrush myBrush = new SolidColorBrush(Colors.Green);

                  exampleRectangle1.Stroke = Brushes.Red;

                  exampleRectangle1.StrokeThickness = 4;

                  exampleRectangle1.Fill = myBrush;

                  canvas1.Children.Insert(0, exampleRectangle1);

         

              }

      Result:



      Figure 2.

       

    3. This code shows how to make a rectangle using Gradient colors.
       

      <!--static rectangle with gradient colors-->

              <Canvas Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" Margin="50,20,0,0">

                  <Rectangle Width="150" Height="150">

                    <Rectangle.Fill>

                      <LinearGradientBrush>

                        <GradientStop Color="Yellow" Offset="0.0" />

                        <GradientStop Color="Orange" Offset="0.5" />

                        <GradientStop Color="Red" Offset="1.0" />

                      </LinearGradientBrush>

                    </Rectangle.Fill>

                  </Rectangle>

              </Canvas>

              <TextBlock Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center">Static Rectangle Gradient</TextBlock>

      Make Dynamically:
       

      <!--dynamic rectangle with gradient colors-->

              <Canvas x:Name="canvas2" Grid.Column="1" Grid.Row="2" Margin="50,20,0,0"></Canvas>

              <TextBlock Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center">Dynamic Rectangle Gradient</TextBlock>

      private void GradientRectangle()

              {

                  Rectangle exampleRectangle = new Rectangle();

                  exampleRectangle.Width = 150;

                  exampleRectangle.Height = 150;

         

                  // Create a RadialGradientBrush and use it to

                  // paint the rectangle.

                  RadialGradientBrush myBrush = new RadialGradientBrush();

                  myBrush.GradientOrigin = new Point(0.75, 0.25);

                  myBrush.GradientStops.Add(new GradientStop(Colors.Yellow, 0.0));

                  myBrush.GradientStops.Add(new GradientStop(Colors.Orange, 0.5));

                  myBrush.GradientStops.Add(new GradientStop(Colors.Red, 1.0));

         

                  exampleRectangle.Fill = myBrush;

                  canvas2.Children.Insert(0, exampleRectangle);

              }



      Figure 3.

       

    4. This code shows how to draw a rectangle paint with an image.

      <!--static paint with image-->

              <Canvas Grid.Column="0" Grid.Row="3" HorizontalAlignment="Left" Margin="50,20,0,0">

                  <Rectangle Width="150" Height="150">               

                      <Rectangle.Fill>

                          <ImageBrush ImageSource="sampleImages\san20a.jpg"  />

                      </Rectangle.Fill>

                  </Rectangle>

              </Canvas>

              <TextBlock Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center">Static Rectangle paint with image</TextBlock>

      Dynamically:

      <!--dynamic paint with image-->

      <Canvas x:Name="canvas3" Grid.Column="1" Grid.Row="3" Margin="50,20,0,0"></Canvas>

      <TextBlock Grid.Column="1" Grid.Row="3" HorizontalAlignment="Center">Dynamic Rectangle paint with image</TextBlock>

        private void PaintWithImageRectangle()

              {

                  Rectangle exampleRectangle = new Rectangle();

                  exampleRectangle.Width = 150;

                  exampleRectangle.Height = 150;

         

                  // Create an ImageBrush and use it to

                  // paint the rectangle.

                  ImageBrush myBrush = new ImageBrush();

                  myBrush.ImageSource =

                      new BitmapImage(new Uri(@"C:\Users\Raj\Documents\Visual Studio 2008\Projects\Chapter1\Chapter1\sampleImages\san20a.jpg", UriKind.Relative));

         

                  exampleRectangle.Fill = myBrush;

                  canvas3.Children.Insert(0, exampleRectangle);

              }

      Result:



      Figure 4.
       

    5. This code shows how to draw paint a rectangle with visual effects.

      <!--static paint with visual-->

              <Canvas Grid.Column="2" Grid.Row="0" HorizontalAlignment="Left" Margin="50,20,0,0">

                  <Rectangle Width="150" Height="150" Stroke="Red" StrokeThickness="4">

                      <Rectangle.Fill>

                          <VisualBrush TileMode="Tile">

                              <VisualBrush.Visual>

                                  <StackPanel>

                                      <StackPanel.Background>

                                          <DrawingBrush>

                                              <DrawingBrush.Drawing>

                                                  <GeometryDrawing>

                                                      <GeometryDrawing.Brush>

                                                          <RadialGradientBrush>

                                                              <GradientStop Color="MediumBlue" Offset="0.0" />

                                                              <GradientStop Color="White" Offset="1.0" />

                                                          </RadialGradientBrush>

                                                      </GeometryDrawing.Brush>

                                                      <GeometryDrawing.Geometry>

                                                          <GeometryGroup>

                                                              <RectangleGeometry Rect="0,0,50,50" />

                                                              <RectangleGeometry Rect="50,50,50,50" />

                                                          </GeometryGroup>

                                                      </GeometryDrawing.Geometry>

                                                  </GeometryDrawing>

                                              </DrawingBrush.Drawing>

                                          </DrawingBrush>

                                      </StackPanel.Background>

                                      <TextBlock FontSize="10pt" Margin="10">Raj Beniwal</TextBlock>

                                  </StackPanel>

                              </VisualBrush.Visual>

                          </VisualBrush>

                      </Rectangle.Fill>

                  </Rectangle>

              </Canvas>

              <TextBlock Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center">Static Rectangle paint with visual</TextBlock>

      Dynamically:
       

      <!--dynamic paint with image-->

      <Canvas x:Name="canvas4" Grid.Column="3" Grid.Row="0" Margin="50,20,0,0"></Canvas>

      <TextBlock Grid.Column="3" Grid.Row="0" HorizontalAlignment="Center">Dynamic Rectangle paint with visual</TextBlock>

      private void VisualRectangle()

              {

                  Rectangle exampleRectangle = new Rectangle();

                  exampleRectangle.Width = 150;

                  exampleRectangle.Height = 150;

                  exampleRectangle.StrokeThickness = 4;

                  exampleRectangle.Stroke = Brushes.Red;

         

                  // Create a VisualBrush and use it

                  // to paint the rectangle.

                  VisualBrush myBrush = new VisualBrush();

         

                  //

                  // Create the brush's contents.

                  //

                  StackPanel aPanel = new StackPanel();

         

                  // Create a DrawingBrush and use it to

                  // paint the panel.

                  DrawingBrush myDrawingBrushBrush = new DrawingBrush();

                  GeometryGroup aGeometryGroup = new GeometryGroup();

                  aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 50, 50)));

                  aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(50, 50, 50, 50)));

                  RadialGradientBrush checkerBrush = new RadialGradientBrush();

                  checkerBrush.GradientStops.Add(new GradientStop(Colors.Green, 0.0));

                  checkerBrush.GradientStops.Add(new GradientStop(Colors.White, 1.0));

                  GeometryDrawing checkers = new GeometryDrawing(checkerBrush, null, aGeometryGroup);

                  myDrawingBrushBrush.Drawing = checkers;

                  aPanel.Background = myDrawingBrushBrush;

         

                  // Create some text.

                  TextBlock someText = new TextBlock();

                  someText.Text = "Raj Beniwal";

                  FontSizeConverter fSizeConverter = new FontSizeConverter();

                  someText.FontSize = (double)fSizeConverter.ConvertFromString("10pt");

                  someText.Margin = new Thickness(10);

         

                  aPanel.Children.Add(someText);

         

                  myBrush.Visual = aPanel;

                  exampleRectangle.Fill = myBrush;

                  canvas4.Children.Insert(0, exampleRectangle);

         

              }



      Figure 5.
       

    6. This code shows how to draw and paint a rectangle with drawing brush.

      <!--static paint with drawing-->

              <Canvas Grid.Column="2" Grid.Row="1" HorizontalAlignment="Left" Margin="50,20,0,0">

                  <Rectangle Width="150" Height="150">

                      <Rectangle.Fill>

                          <DrawingBrush Viewport="0,0,0.25,0.25" TileMode="Tile">

                              <DrawingBrush.Drawing>

                                  <DrawingGroup>

                                      <GeometryDrawing Brush="White">

                                          <GeometryDrawing.Geometry>

                                              <RectangleGeometry Rect="0,0,100,100" />

                                          </GeometryDrawing.Geometry>

                                      </GeometryDrawing>

         

                                      <GeometryDrawing>

                                          <GeometryDrawing.Geometry>

                                              <GeometryGroup>

                                                  <RectangleGeometry Rect="0,0,50,50" />

                                                  <RectangleGeometry Rect="50,50,50,50" />

                                              </GeometryGroup>

                                          </GeometryDrawing.Geometry>

                                          <GeometryDrawing.Brush>

                                              <LinearGradientBrush>

                                                  <GradientStop Offset="0.0" Color="Red" />

                                                  <GradientStop Offset="1.0" Color="Green" />

                                              </LinearGradientBrush>

                                          </GeometryDrawing.Brush>

                                      </GeometryDrawing>

                                  </DrawingGroup>

                              </DrawingBrush.Drawing>

                          </DrawingBrush>

                      </Rectangle.Fill>

                  </Rectangle>

              </Canvas>

              <TextBlock Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center">Static Rectangle paint with drawing</TextBlock>

      Dynamic:
       

      <!--dynamic paint with drawing-->

      <Canvas x:Name="canvas5" Grid.Column="3" Grid.Row="1" Margin="50,20,0,0"></Canvas>

      <TextBlock Grid.Column="3" Grid.Row="1" HorizontalAlignment="Center">Dynamic Rectangle paint with drawing</TextBlock>

      private void PaintWithDrawing()

              {

                  Rectangle exampleRectangle = new Rectangle();

                  exampleRectangle.Width = 150;

                  exampleRectangle.Height = 150;

         

                  // Create a DrawingBrush and use it to

                  // paint the rectangle.

                  DrawingBrush myBrush = new DrawingBrush();

         

                  GeometryDrawing backgroundSquare =

                      new GeometryDrawing(

                          Brushes.White,

                          null,

                          new RectangleGeometry(new Rect(0, 0, 100, 100)));

         

                  GeometryGroup aGeometryGroup = new GeometryGroup();

                  aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(0, 0, 50, 50)));

                  aGeometryGroup.Children.Add(new RectangleGeometry(new Rect(50, 50, 50, 50)));

         

                  LinearGradientBrush checkerBrush = new LinearGradientBrush();

                  checkerBrush.GradientStops.Add(new GradientStop(Colors.Red, 0.0));

                  checkerBrush.GradientStops.Add(new GradientStop(Colors.Green, 1.0));

         

                  GeometryDrawing checkers = new GeometryDrawing(checkerBrush, null, aGeometryGroup);

         

                  DrawingGroup checkersDrawingGroup = new DrawingGroup();

                  checkersDrawingGroup.Children.Add(backgroundSquare);

                  checkersDrawingGroup.Children.Add(checkers);

         

                  myBrush.Drawing = checkersDrawingGroup;

                  myBrush.Viewport = new Rect(0, 0, 0.25, 0.25);

                  myBrush.TileMode = TileMode.Tile;

         

                  exampleRectangle.Fill = myBrush;

                  canvas5.Children.Insert(0, exampleRectangle);

              }

      Result:



      Figure 6.

       

    7. This code shows how to draw and fill a rectangle with a brush and opacity (transparency). The Opacity property defines the transparency of a control in XAML and WPF.

      <!--static rectangle with brush -->

              <Canvas Grid.Column="2" Grid.Row="2" HorizontalAlignment="Left" Margin="50,20,0,0">

                  <Rectangle Width="150" Height="150">

                      <Rectangle.Fill>

                          <SolidColorBrush Color="Green" Opacity="0.25" />

                      </Rectangle.Fill>

                  </Rectangle>

              </Canvas>

              <TextBlock Grid.Column="2" Grid.Row="2" HorizontalAlignment="Center">Static Rectangle rectangle with brush</TextBlock>

      Dynamic:
       

      <!--dynamic rectangle using brush-->

              <Canvas x:Name="canvas6" Grid.Column="3" Grid.Row="2" Margin="50,20,0,0"></Canvas>

              <TextBlock Grid.Column="3" Grid.Row="2" HorizontalAlignment="Center">Dynamic Rectangle paint with drawing</TextBlock>

      private void RectangleWithBrush()

              {

                  Rectangle myRectangle = new Rectangle();

                  myRectangle.Width = 150;

                  myRectangle.Height = 150;

                  SolidColorBrush partiallyTransparentSolidColorBrush

                      = new SolidColorBrush(Colors.Green);

                  partiallyTransparentSolidColorBrush.Opacity = 0.25;

                  myRectangle.Fill = partiallyTransparentSolidColorBrush;

                  canvas6.Children.Insert(0, myRectangle);

         

              }

      Result:



      Figure 7.

       

    8. This demonstrate how to rotate a rectangle using transformation. The RenderTransform property of Rectangle is responsible for transforming a rectangle such as rotating.
       

      <!--static rotate rectangle -->

              <Canvas Grid.Column="2" Grid.Row="3" HorizontalAlignment="Left" Margin="50,20,0,0">

                  <Rectangle Width="150" Height="150" Stroke="#FFBF4343" Canvas.Left="10" Canvas.Top="10" StrokeThickness="4" RenderTransformOrigin="0.5,0.5">

                      <Rectangle.RenderTransform>

                          <TransformGroup>

                              <ScaleTransform ScaleX="1" ScaleY="1"/>

                              <SkewTransform AngleX="0" AngleY="0"/>

                              <RotateTransform Angle="30.704"/>

                              <TranslateTransform X="0" Y="0"/>

                          </TransformGroup>

                      </Rectangle.RenderTransform>

                      <Rectangle.Fill>

                          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                              <GradientStop Color="#FF000000" Offset="0"/>

                              <GradientStop Color="#FF1E1919" Offset="1"/>

                          </LinearGradientBrush>

                      </Rectangle.Fill>

                  </Rectangle>

              </Canvas>

              <TextBlock Grid.Column="2" Grid.Row="3" HorizontalAlignment="Center">Static Rotate Rectangle</TextBlock>

      Result:


      Figure 8.

    For more information see attached project. This is it.

  • 相关阅读:
    独立思考模型与经验-仅供参考
    独立思考与输入、吸收
    基于事实和全方位思考
    独立思考有四个层次-知识体系
    思维框架
    阅读、思考与吸收
    思考与阅读
    博学之,审问之,慎思之,明辨之,笃行之:思考与成长
    如何成为有想法的人?如何培养独立思考的能力?
    人的本质--以人为本--思考-认识世界、改造世界
  • 原文地址:https://www.cnblogs.com/peach/p/1338905.html
Copyright © 2011-2022 走看看