我有一条垂直线和一条水平线,当我动态调整画布父级时,我希望调整大小。 (界标)
我希望水平线总是距离画布的左右边框25,距离底部边框13。
和垂直线相同,25个远离顶部和底部边框,13个距离左边框。
有简单的解决方案吗? 我可以将画布改为另一个控件吗?
答案 0 :(得分:7)
只需将线条粘贴在画布顶部的网格中即可获得正确的行为
<Grid Width="600" Height="600">
<Canvas Background="LightBlue">
// stuff here
</Canvas>
<Grid>
<Rectangle Fill="Black" Height="1"
Stroke="Black" VerticalAlignment="Bottom" Margin="25,0,25,13"/>
<Rectangle Fill="Black"
HorizontalAlignment="Left" Stroke="Black" Width="1" Margin="13,25,0,25"/>
</Grid>
</Grid>
答案 1 :(得分:3)
我会根据您Converters
的{{1}}和ActualHeight
使用ActualWidth
来设置Canvas
个对象的高度,宽度和位置< / p>
为了避免编写一堆单独的转换器,我在我的博客上发布了MathConverter,可以用于所有计算。
Line
因为这些都是Bindings,所以只要绑定属性发生更改,它们就会刷新(<Canvas x:Name="MyCanvas">
<!-- Horizontal Line: 25 from each side, and 13 from bottom -->
<!-- May need to adjust the Canvas.Top ConverterParameter based on Line height -->
<Line Height="1"
Canvas.Left="25"
Canvas.Top="{Binding ElementName=MyCanvas, Path=ActualHeight,
Converter={StaticResource MathConverter},
ConverterParameter=@VALUE-14}"
Width="{Binding ElementName=MyCanvas, Path=ActualWidth,
Converter={StaticResource MathConverter},
ConverterParameter=@VALUE-50}" ... />
<!-- Vertical Line: 25 from top and bottom, and 13 from left -->
<Line Canvas.Left="13" Canvas.Top="25"
Height="{Binding ElementName=MyCanvas, Path=ActualHeight,
Converter={StaticResource MathConverter},
ConverterParameter=@VALUE-50}" ... />
</Canvas>
和MyCanvas.ActualHeight
)
答案 2 :(得分:1)
如果您需要设置Grid
,请使用Canvas
代替Margin
。
要使您的线条与边框有空格,请转到“属性”并使用“布局区域”中的Margin
来设置空格。对于水平线,将VerticalAlignment
设置为Bottom
,将HorizontalAlignment设置为Stretch
。在这种情况下,保证金应为25,0,25,13
。
对于您的垂直线,将VerticalAlignment
设置为Stretch
,将HorizontalAlignment
设置为Left
。保证金应为13,25,0,25
有运气