我有以下XAML。我必须根据子控件(CanvasRuler
)左侧位置将余量设置为LabelEditFrame
。我该怎么做。
<wpfcommon:CanvasNavigationBar>
<DockPanel>
<wpfcommon:CanvasRuler /> <!-- Horizontal -->
</wpfcommon:CanvasRuler /> <!-- Vertical -->
<border>
<StackPanel>
<wpfcommon:LabelEditFrame>
</ wpfcommon:LabelEditFrame>
</StackPanel>
</border>
</DockPanel>
</wpfcommon:CanvasNavigationBar>
现在我有了这个
我想要这个(我可以通过设置硬编码值来实现,但我需要动态设置它,所以如果子控件的位置发生变化,它会自动改变标尺位置)
答案 0 :(得分: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>
答案 1 :(得分:0)
根据我的经验,如果这是在画布上并且是画布上的孩子,则可以使用
Canvas.SetLeft
和
Canvas.SetTop
方法
因此,对于标尺,您可以设置:
VerticalAlignment="Top", HorizontalAlignment="Left
然后当移动LabelEditFrame时(无论你使用哪个事件触发),你可以用这样的东西调整两个标尺:
Canvas.SetLeft(HorizontalCanvasRuler, LabelEditFrame.Margin.Left);
Canvas.SetTop(VerticalCanvasRuler, LabelEditFrame.Margin.Top);
我没有尝试过这个,但我以前习惯调整这样的控件,所以应该可以工作:)