我想同时调整多个形状的大小。这是我的xaml代码。它有2个画布叫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"
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>
答案 0 :(得分:1)
在您的代码中,您可以执行以下操作:
IEnumerable<Canvas> Collection = RootControl.Chidren.ofType<Canvas>();
foreach(Canvas c in Collection)
{
c.Height = NewHeight;
c.Width = NewWidth;
}
答案 1 :(得分:1)
根据当前信息 -
您可以在Width
(或CodeBehind或您设置为Height
/ usercontrol的ViewModel
的任何对象)中创建DataContext
和Window
属性并将每个Width
的{{1}}和Height
绑定到他们身上;在代码中更改这些属性将调整xaml中的所有画布。
如果您不想为每个画布添加绑定,可以为Canvas
(without x:Key
)创建一个全局样式,该样式将自动应用于每个Canvas
;但是你必须小心地将这种风格放在正确的位置,在你提供的当前xaml中,将Canvas
添加到最顶层Canvas的资源是有意义的。
这样的事情 -
style
作为旁注,我建议你不要依赖转换后的XAML;尝试重构它以使用适当的conrols /面板,将相关部分提取到用户控件中,使用样式/触发器等。
答案 2 :(得分:0)
您可以创建一个包含所有画布的Viewbox ...向我们提供有关您项目的更多信息。