2011-05-31 155 views
7

这是我到目前为止。如何绘制水平线并居中?

当手机垂直:

enter image description here

当手机横向: enter image description here

这里是我的XAML标记:

<StackPanel Margin="19 0 19 5"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="110" /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <Image Grid.Column="0" Source="{Binding ImageUrl}" 
       Stretch="Uniform" 
       Margin="0 10 0 10"/> 

     <StackPanel Grid.Column="1" Margin="14 0 0 0"> 
      <TextBlock Text="{Binding Title}" 
         FontSize="30" /> 
      <TextBlock Text="{Binding ReleaseDate}" 
         FontSize="22" 
         Foreground="#E0A655"/> 
      <TextBlock Text="{Binding Synopsis}" 
         FontSize="22" 
         TextWrapping="Wrap"/> 
     </StackPanel>               
    </Grid> 
    <Line StrokeThickness="4" Stroke="#434343" X1="0" X2="350" 
     Y1="13" Y2="13" /> 
</StackPanel> 

我想有一行与目前的宽度相同,但居中。但是,当手机处于水平状态时,该线路应该更大一些,以解决更广泛的可用空间。

这可能吗?

回答

12

您可以通过使用保证金来调整您的内容而不是位置的大小。

如果使用Line(我没有真正检查过)不可能,那么您可以尝试使用1像素高(或4)而不是Rectangle。

编辑:用代码片段:

<Line HorizontalAlignment="Stretch" Margin="50, 10, 50, 10" Stroke="Black" StrokeThickness="4" /> 
+0

哇,工作比预期好。 :)当计时器达到零时,我会将此标记为已解决。 – 2011-05-31 13:01:49

+0

为什么downvote? – jv42 2011-05-31 13:02:00

+0

我没有倒下,别人也没有。 – 2011-05-31 13:03:25

12

您可以使用Stretch使你Line占据容器的整个宽度。您还可以使用左/右页边距在每边加少许空间:在第一种观点

<Line X1="0" X2="1" Stretch="Fill" Margin="20,0,20,0"/> 
1

也许有点出人意料:行(以及其他形状 - 矩形,椭圆...)是FrameworkElements 。您可以像处理TextBlock一样处理它们,即设置尺寸,对齐,边距,不透明度,变换等等。您甚至可以动画/绑定形状定义属性(如Line.X1),因为它们都是DependencyProperties。