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>
    <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 移动时(无论您使用哪个事件来触发它),您都可以使用以下方式调整两个标尺:

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

我还没有尝试过,但我以前曾经调整过这样的控件,所以它应该可以工作:)

于 2012-06-13T15:18:55.683 回答