【问题标题】:WPF calculate Parent margin based on child control positionWPF根据子控件位置计算父边距
【发布时间】:2012-06-13 14:47:04
【问题描述】:

我有以下 XAML。我必须根据子控件(LabelEditFrame)的左侧位置将边距设置为CanvasRuler。我该怎么做。

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

我现在有这个

我想要这个(我可以通过设置硬编码值来做到这一点,但我需要动态设置它,所以如果子控件的位置发生变化,它会自动改变标尺位置) .

【问题讨论】:

  • 什么会导致用户控件这样移动?

标签: wpf rulers


【解决方案1】:

根据我的经验,如果这是在画布上并且是画布上的孩子,则可以使用

Canvas.SetLeft

Canvas.SetTop

方法。

所以对于统治者,你可以设置:

VerticalAlignment="Top", HorizontalAlignment="Left

然后,当 LabelEditFrame 移动时(无论您使用哪个事件来触发它),您都可以通过以下方式调整两个标尺:

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

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

【讨论】:

    【解决方案2】:

    我建议你将所有这些东西放到 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>
    

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 2017-08-21
      • 2022-12-10
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      相关资源
      最近更新 更多