为了账号安全,请及时绑定邮箱和手机立即绑定

WPF 画布填充

WPF 画布填充

C#
慕娘9325324 2021-11-28 20:11:28
我目前有一个带有 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 以编程方式添加行。
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

不确定您的确切用例是什么,但您可能会受益于使用ViewBox:


<Border>

    <Viewbox Stretch="Uniform">

        <Canvas x:Name="cMap" Width="15" Height="25">

            <Canvas.LayoutTransform>

                <ScaleTransform />

            </Canvas.LayoutTransform>

            <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>

    </Viewbox>

</Border>


查看完整回答
反对 回复 2021-11-28
?
狐的传说

TA贡献1804条经验 获得超3个赞

希望这对你有帮助!


要在代码中绘制线条,您应该执行以下操作:


Line line = new Line();

    Thickness thickness = new Thickness(101,-11,362,250);

    line.Margin = thickness;

    line.Visibility = System.Windows.Visibility.Visible;

    line.StrokeThickness = 4;

    line.Stroke = System.Windows.Media.Brushes.Black;

    line.X1 = 10;

    line.X2 = 40;

    line.Y1 = 70;

    line.Y2 = 70;

并且不要忘记添加:


myCanvas.Children.Add(line); 

把这些线放在某个地方

要调整画布大小,请阅读以下内容:


Canvas 是唯一没有固有布局特征的面板元素。Canvas 的默认 Height 和 Width 属性为零,除非它是自动调整其子元素大小的元素的子元素。Canvas 的子元素永远不会调整大小,它们只是定位在指定的坐标处。这为不需要或不需要固有大小限制或对齐的情况提供了灵活性。对于您希望子内容自动调整大小和对齐的情况,通常最好使用 Grid 元素。


因此,作为解决方案,您可以将其放入 GRID 或使用以下代码:


public class CanvasAutoSize : Canvas

{

protected override System.Windows.Size MeasureOverride(System.Windows.Size constraint)

{

    base.MeasureOverride(constraint);

    double width = base

        .InternalChildren

        .OfType<UIElement>()

        .Max(i => i.DesiredSize.Width + (double)i.GetValue(Canvas.LeftProperty));


    double height = base

        .InternalChildren

        .OfType<UIElement>()

        .Max(i => i.DesiredSize.Height + (double)i.GetValue(Canvas.TopProperty));


    return new Size(width, height);

}

}

在您的 XAML:


 <local:CanvasAutoSize VerticalAlignment="Top" HorizontalAlignment="Left"></local:CanvasAutoSize>


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 360 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信