2013-05-25 30 views
1

我看到过几个类似的问题,但没有解决方案适用于我,可能是因为我的网格设置为Stretch。这是我想要实现的结果。基本上,我有一个Grid,我想绘制一个X轴线(就像这个问题最后的图片一样)。在宽度自动设置的网格上绘制居中线?

我的XAML

<Grid x:Name="MainGrid" HorizontalAlignment="Stretch" Background="#FF4A70F1"> 

我隐藏

 Line XAxis = new Line(); 
     XAxis.Stroke = System.Windows.Media.Brushes.Black; 
     XAxis.StrokeThickness = 1; 

     XAxis.X1 = 0; 
     XAxis.X2 = MainGrid.RenderSize.Width; 
     XAxis.Y1 = MainGrid.RenderSize.Height/2; 
     XAxis.Y2 = MainGrid.RenderSize.Height/2; 

     MainGrid.Children.Add(XAxis); 

我的问题

我倒是想此行跨越整个窗口,即使我调整/最大化窗口。但是,上述X2,Y1,Y2的计算不起作用(全部评估为0,因此显示NO LINE),无论我使用的是ActualSize还是*RenderSize*。有人可以指出如何解决这个问题吗?谢谢 to achieve

+1

是你的代码执行时?您至少必须调整窗口大小调整时的行端点,可能是[SizeChanged](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.sizechanged.aspx )处理程序,或将它们的x和y值绑定到网格的大小。 – Clemens

+0

这是rightafter的InitializeComponent();但至少我应该在启动时看到一条线?没有? –

+0

不,窗口宽度和高度在构造函数中为0。 – Clemens

回答

2

此XAML创建一个垂直居中行水平延伸:

<Grid> 
    <Line HorizontalAlignment="Left" VerticalAlignment="Center" Stroke="Black" 
      X2="{Binding ActualWidth, 
       RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}}"/> 
</Grid>