WPF 画布填充

我目前有一个带有 Canvas 的 WPF 窗口是 600 x 400。是否可以缩放或自动放大以使线条尽可能多地占据 600x600?


   <Border>

          <Canvas x:Name="cMap" Width="600" Height="400">

                 <Line X1="5" Y1="5" X2 ="10" Y2="10" StrokeThickness="2" Stroke="Black"/>

                 <Line X1="10" Y1="10" X2 ="15" Y2="25" StrokeThickness="2" Stroke="Black"/>

          </Canvas>

   </Border>

我的目的是通过代码而不是 XAML 以编程方式添加行。


慕娘9325324
浏览 361回答 2
2回答

开心每一天1111

不确定您的确切用例是什么,但您可能会受益于使用ViewBox:<Border>&nbsp; &nbsp; <Viewbox Stretch="Uniform">&nbsp; &nbsp; &nbsp; &nbsp; <Canvas x:Name="cMap" Width="15" Height="25">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <Canvas.LayoutTransform>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <ScaleTransform />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </Canvas.LayoutTransform>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <Line X1="5" Y1="5" X2 ="10" Y2="10" StrokeThickness="2" Stroke="Black"/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <Line X1="10" Y1="10" X2 ="15" Y2="25" StrokeThickness="2" Stroke="Black"/>&nbsp; &nbsp; &nbsp; &nbsp; </Canvas>&nbsp; &nbsp; </Viewbox></Border>

狐的传说

希望这对你有帮助!要在代码中绘制线条,您应该执行以下操作:Line line = new Line();&nbsp; &nbsp; Thickness thickness = new Thickness(101,-11,362,250);&nbsp; &nbsp; line.Margin = thickness;&nbsp; &nbsp; line.Visibility = System.Windows.Visibility.Visible;&nbsp; &nbsp; line.StrokeThickness = 4;&nbsp; &nbsp; line.Stroke = System.Windows.Media.Brushes.Black;&nbsp; &nbsp; line.X1 = 10;&nbsp; &nbsp; line.X2 = 40;&nbsp; &nbsp; line.Y1 = 70;&nbsp; &nbsp; line.Y2 = 70;并且不要忘记添加:myCanvas.Children.Add(line);&nbsp;把这些线放在某个地方要调整画布大小,请阅读以下内容:Canvas 是唯一没有固有布局特征的面板元素。Canvas 的默认 Height 和 Width 属性为零,除非它是自动调整其子元素大小的元素的子元素。Canvas 的子元素永远不会调整大小,它们只是定位在指定的坐标处。这为不需要或不需要固有大小限制或对齐的情况提供了灵活性。对于您希望子内容自动调整大小和对齐的情况,通常最好使用 Grid 元素。因此,作为解决方案,您可以将其放入 GRID 或使用以下代码:public class CanvasAutoSize : Canvas{protected override System.Windows.Size MeasureOverride(System.Windows.Size constraint){&nbsp; &nbsp; base.MeasureOverride(constraint);&nbsp; &nbsp; double width = base&nbsp; &nbsp; &nbsp; &nbsp; .InternalChildren&nbsp; &nbsp; &nbsp; &nbsp; .OfType<UIElement>()&nbsp; &nbsp; &nbsp; &nbsp; .Max(i => i.DesiredSize.Width + (double)i.GetValue(Canvas.LeftProperty));&nbsp; &nbsp; double height = base&nbsp; &nbsp; &nbsp; &nbsp; .InternalChildren&nbsp; &nbsp; &nbsp; &nbsp; .OfType<UIElement>()&nbsp; &nbsp; &nbsp; &nbsp; .Max(i => i.DesiredSize.Height + (double)i.GetValue(Canvas.TopProperty));&nbsp; &nbsp; return new Size(width, height);}}在您的 XAML:&nbsp;<local:CanvasAutoSize VerticalAlignment="Top" HorizontalAlignment="Left"></local:CanvasAutoSize>
打开App,查看更多内容
随时随地看视频慕课网APP