Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缩放过大的项目以适应WPF画布的问题_C#_Wpf_Wpf Controls - Fatal编程技术网

C# 缩放过大的项目以适应WPF画布的问题

C# 缩放过大的项目以适应WPF画布的问题,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我有一个画布,我正在填充代码隐藏(C#),我正在绘制的是一个基于参数的建筑动态模型,所以我需要它缩放到100%适合画布区域,即使它超过画布宽度和高度。我能找到的唯一解决方案是将画布元素拉伸到合适的位置,我需要将它们收缩到合适的位置 这是我最近的一次: <Grid> <Viewbox Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Top"> <Canvas x:N

我有一个画布,我正在填充代码隐藏(C#),我正在绘制的是一个基于参数的建筑动态模型,所以我需要它缩放到100%适合画布区域,即使它超过画布宽度和高度。我能找到的唯一解决方案是将画布元素拉伸到合适的位置,我需要将它们收缩到合适的位置

这是我最近的一次:

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