C# 缩放过大的项目以适应WPF画布的问题
我有一个画布,我正在填充代码隐藏(C#),我正在绘制的是一个基于参数的建筑动态模型,所以我需要它缩放到100%适合画布区域,即使它超过画布宽度和高度。我能找到的唯一解决方案是将画布元素拉伸到合适的位置,我需要将它们收缩到合适的位置 这是我最近的一次:C# 缩放过大的项目以适应WPF画布的问题,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我有一个画布,我正在填充代码隐藏(C#),我正在绘制的是一个基于参数的建筑动态模型,所以我需要它缩放到100%适合画布区域,即使它超过画布宽度和高度。我能找到的唯一解决方案是将画布元素拉伸到合适的位置,我需要将它们收缩到合适的位置 这是我最近的一次: <Grid> <Viewbox Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Top"> <Canvas x:N
<Grid>
<Viewbox Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Top">
<Canvas x:Name="Canvas" Background="Transparent" Margin="0" Width="800" HorizontalAlignment="Left" VerticalAlignment="Top" Height="600" >
<Canvas.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="1" />
</Canvas.LayoutTransform>
</Canvas>
</Viewbox>
</Grid>
您想使用画布而不是网格的具体原因是什么?网格可以自动展开以包含子元素(然后周围的ViewBox可以收缩整个包以适合窗口)。如果您真的需要使用画布,那么您可能需要在代码隐藏中更改其宽度和高度,以适应内容。@RogerN我来自Web Dev,当我们绘制(SVG除外)时,我们只使用画布,我当时不知道这有什么意义。什么是绘图/模型?是图像还是别的什么?你能把代码放在后面吗?@CJK添加了元素添加的要点。你不能在代码后面设置矩形的高度和宽度属性吗?你想使用画布而不是网格吗?网格可以自动展开以包含子元素(然后周围的ViewBox可以收缩整个包以适合窗口)。如果您真的需要使用画布,那么您可能需要在代码隐藏中更改其宽度和高度,以适应内容。@RogerN我来自Web Dev,当我们绘制(SVG除外)时,我们只使用画布,我当时不知道这有什么意义。什么是绘图/模型?是图像还是别的什么?你能把代码放在后面吗?@CJK添加了元素添加的要点。你不能在代码后面设置矩形的高度和宽度属性吗?你想使用画布而不是网格吗?网格可以自动展开以包含子元素(然后周围的ViewBox可以收缩整个包以适合窗口)。如果您真的需要使用画布,那么您可能需要在代码隐藏中更改其宽度和高度,以适应内容。@RogerN我来自Web Dev,当我们绘制(SVG除外)时,我们只使用画布,我当时不知道这有什么意义。什么是绘图/模型?是图像还是别的什么?你能把代码放在后面吗?@CJK添加了元素添加的要点。你不能在代码后面设置矩形的高度和宽度属性吗?
var areaRectangle = new Rectangle();
areaRectangle.Stroke = Brushes.Red;
areaRectangle.StrokeThickness = 3;
var areaTextblock = new TextBlock();
areaTextblock.Text = child.Name;
areaTextblock.Margin = new Thickness(48, 6, 0, 0);
areaRectangle.Width = (childData.Length.GetValueOrDefault() - 6);
areaRectangle.Height = (childData.Width.GetValueOrDefault() - 6);
Canvas.SetLeft(areaRectangle, areaLeft + 3);
Canvas.SetTop(areaRectangle, 3);
Canvas.SetLeft(areaTextblock, areaLeft + 3);
Canvas.SetTop(areaTextblock, 3);
Canvas.Children.Add(areaRectangle);
Canvas.Children.Add(areaTextblock);