0

私は次のXAMLを持っています。CanvasRuler子コントロール(LabelEditFrame)左位置に従ってマージンを設定する必要があります。それ、どうやったら出来るの。

   <wpfcommon:CanvasNavigationBar>
        <DockPanel>
            <wpfcommon:CanvasRuler />     <!-- Horizontal -->
            </wpfcommon:CanvasRuler  />   <!-- Vertical -->
            <border>
                <StackPanel>
                    <wpfcommon:LabelEditFrame>
                    </ wpfcommon:LabelEditFrame>
                </StackPanel>
            </border>
        </DockPanel>
    </wpfcommon:CanvasNavigationBar>

今私はこれを持っています

ここに画像の説明を入力してください

これが欲しい(ハードコードされた値を設定することでそれを行うことができますが、動的に設定する必要があるため、子コントロールの位置が変更されると、ルーラーの位置が自動的に変更されます)。

ここに画像の説明を入力してください

4

2 に答える 2

0

私はあなたがそれらすべてのものをグリッドに置き、それがあなたのために何かを計算できるようにすることをお勧めします:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="SomeFixedHeightToGetTopMargin"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition  Width="SomeFixedWithToGetLeftMargin"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>

    <wpfcommon:CanvasRuler Grid.Column="1"/>
    <wpfcommon:CanvasRuler Grid.Row="1"/>
    <Border Grid.Row="1" Grid.Column="1">
        <StackPanel>
            <wpfcommon:LabelEditFrame/>
        </StackPanel>
    </Border>
</Grid>
于 2012-06-13T15:15:34.860 に答える
0

私の経験から、これがキャンバス上にあり、キャンバス上の子である場合は、

Canvas.SetLeft

Canvas.SetTop

メソッド。

したがって、ルーラーの場合、次のように設定できます。

VerticalAlignment="Top", HorizontalAlignment="Left

次に、LabelEditFrameを移動すると(それをトリガーするために使用するイベントに関係なく)、次のように2つのルーラーを調整できます。

Canvas.SetLeft(HorizontalCanvasRuler, LabelEditFrame.Margin.Left);
Canvas.SetTop(VerticalCanvasRuler, LabelEditFrame.Margin.Top);

私はこれを試したことがありませんが、以前はこのようなコントロールを調整していたので、うまくいくはずです:)

于 2012-06-13T15:18:55.683 に答える