C# 如何在WPF中调整多个画布的大小?
我想同时调整多个形状的大小。这是我的xaml代码。它有两块画布,分别是g6和g10,但在实际项目中,我得到了近100块画布。有解决办法吗C# 如何在WPF中调整多个画布的大小?,c#,wpf,forms,xaml,canvas,C#,Wpf,Forms,Xaml,Canvas,我想同时调整多个形状的大小。这是我的xaml代码。它有两块画布,分别是g6和g10,但在实际项目中,我得到了近100块画布。有解决办法吗 <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="svg2" Width="612" Hei
<Canvas
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="svg2"
Width="612"
Height="800">
<Canvas
x:Name="g4"
RenderTransform="1.3702001,0,0,1.4522231,268.12186,265.31238">
<Canvas x:Name="g6">
<Path
x:Name="path8"
Data="F1 M-153.219,-37.369C-153.219,-37.369 -153.168,-36.483 -153.579,-36.491 -153.99,-36.5 -162.189,-58.998 -172.418,-57.948 -172.419,-57.948 -163.557,-61.389 -153.219,-37.369L-153.219,-37.369z"
Fill="#FFFFFFFF"
Stroke="#FF000000"
StrokeMiterLimit="4"
StrokeThickness="0.172" />
</Canvas>
<Canvas x:Name="g10">
<Path
x:Name="path12"
Data="F1 M-151.46,-38.783C-151.46,-38.783 -151.734,-37.933 -152.117,-38.073 -152.5,-38.212 -152.06,-61.988 -162.059,-64.269 -162.059,-64.269 -152.48,-64.673 -151.46,-38.783z"
Fill="#FFFFFFFF"
Stroke="#FF000000"
StrokeMiterLimit="4"
StrokeThickness="0.172" />
</Canvas>
</Canvas>
</Canvas>
在代码中,您可以执行以下操作:
IEnumerable<Canvas> Collection = RootControl.Chidren.ofType<Canvas>();
foreach(Canvas c in Collection)
{
c.Height = NewHeight;
c.Width = NewWidth;
}
IEnumerable Collection=RootControl.children.ofType();
foreach(集合中的画布c)
{
c、 高度=新高度;
c、 宽度=新宽度;
}
您可以创建一个包含所有画布的Viewbox。。。请提供有关您项目的更多信息。基于当前信息-
您可以在ViewModel
中创建Width
和Height
属性(或CodeBehind或设置为Window
/usercontrol的DataContext
的任何对象),并将每个画布的Width
和Height
绑定到它们;在代码中更改这些属性将调整xaml中所有画布的大小
如果不想向每个画布添加绑定,可以为画布
()创建全局样式,该样式将自动应用于每个画布
;但是在将此样式放在正确的位置时必须小心,在您提供的当前xaml中,将此样式添加到最顶层画布的资源中是有意义的
像这样的-
<Canvas xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Name="svg2" Width="612" Height="800" >
<Canvas.Resources>
<Style TargetType="{x:Type Canvas}">
<Setter Property="Width" Value="{Binding GlobalWidth}" />
<Setter Property="Height" Value="{Binding GlobalHeight}" />
</Style>
</Canvas.Resources>
<Canvas x:Name="g4" ... />
<Canvas x:Name="g6" ... />
<Canvas x:Name="g10" ... />
</Canvas>
作为旁注,我建议您不要像现在这样依赖转换后的XAML;尝试并重构它以使用适当的控件/面板,将相关部分提取到用户控件中,使用样式/触发器等。您做过任何研究吗?你已经试过什么了?你对我的外形是什么意思?我想调整我所有画布的大小。我不想一个接一个地调整它们的大小。你说的@hellzone是什么意思?无论你做什么,它都会一个接一个地改变属性。几乎所有的代码都是逐行执行的我只是将SVG文件转换为XAML。问题是我的XAML文件现在有100个画布。我想在运行时调整它们的大小。