在调整画布父级大小时,wpf拉伸一条线

时间:2012-06-25 14:17:27

标签: wpf canvas resize line stretch

我有一条垂直线和一条水平线,当我动态调整画布父级时,我希望调整大小。 (界标)

我希望水平线总是距离画布的左右边框25,距离底部边框13。

和垂直线相同,25个远离顶部和底部边框,13个距离左边框。

有简单的解决方案吗? 我可以将画布改为另一个控件吗?

3 个答案:

答案 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,将Horizo​​ntalAlignment设置为Stretch。在这种情况下,保证金应为25,0,25,13

对于您的垂直线,将VerticalAlignment设置为Stretch,将HorizontalAlignment设置为Left。保证金应为13,25,0,25

有运气