1

複数の図形のサイズを同時に変更したい。xamlコードは次のとおりです。g6とg10という2つのキャンバスがありますが、実際のプロジェクトでは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>
4

3 に答える 3

1

コードでは、次のようなことができます。

IEnumerable<Canvas> Collection = RootControl.Chidren.ofType<Canvas>();
foreach(Canvas c in Collection)
{
    c.Height = NewHeight;
    c.Width = NewWidth;
}
于 2012-07-04T10:37:06.273 に答える
1

現在の情報に基づいて -

(または CodeBehind または /usercontrol の時点で設定しているオブジェクト)WidthHeightプロパティを作成し、それぞれをそれらにバインドできます。コードでこれらのプロパティを変更すると、xaml のすべてのキャンバスのサイズが変更されます。ViewModelDataContextWindowWidthHeightCanvas

各キャンバスにバインドを追加したくない場合は、Canvas(なしでx:Key) のグローバル スタイルを作成できます。これは、各 に自動的に適用されますCanvas。ただし、このスタイルを正しい場所に配置する際には注意が必要です。提供した現在の xaml では、これstyleをキャンバスのほとんどのリソースの一番上に追加することは理にかなっています。

このようなもの -

<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 をそのまま使用しないことをお勧めします。適切なコントロール/パネルを使用し、関連する部分をユーザーコントロールに抽出し、スタイル/トリガーなどを使用するようにリファクタリングしてみてください。

于 2012-07-04T13:28:12.033 に答える
0

すべてのキャンバスを含む Viewbox を作成できます... プロジェクトに関する詳細情報を提供してください。

于 2012-07-04T10:52:12.337 に答える