2011-11-06 83 views
0

我是新来的wpf。 我在里面有一个WPF按钮, 我需要把2元一个文本块,并视框封装帆布如何组织按钮内的元素

的问题是,我似乎无法看到画布可言,除非我给它一个静态值它的大小

<Button Margin="10,30,10,10" Padding="0"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="2*"/>       
     </Grid.ColumnDefinitions> 

     <TextBlock Text="Me" Grid.Row="0" Grid.Column="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"></TextBlock> 
     <Viewbox Margin="0,0,0,5"> 
      <Canvas Background="red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="1" > 
        <Ellipse HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stroke="Black" StrokeThickness="4" ></Ellipse>       
      </Canvas> 
     </Viewbox> 
    </Grid> 
</Button> 

iv'e也试图利用这个堆栈面板,在任何情况下的水平orintation 画布不显示

的是什么,我做错了什么想法? 谢谢。

回答

1
  1. 附加当在网格子级,即在画布上设置的属性不会生效,他们应在容器中,视框是网格的直接子上设置网格属性才起作用。

  2. 仅当内容具有具体的大小时,Viewbox才有效,您可能既不需要ViewBox也不需要Canvas。如果你想椭圆为圆形设置Stretch="Uniform"

  3. 按钮的内容不舒展默认情况下,你应该设置HorizontalContentAligment和其垂直对口Stretch

例如,

<Button Margin="10,30,10,10" Padding="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*" /> 
      <ColumnDefinition Width="2*" /> 
     </Grid.ColumnDefinitions> 

     <TextBlock Text="Me" Grid.Row="0" Grid.Column="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"></TextBlock> 
     <Ellipse Stretch="Uniform" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
       Stroke="Black" StrokeThickness="4"></Ellipse> 
    </Grid> 
</Button> 
+0

什么时候我会在这种情况下使用视图框和画布? 椭圆不是我需要绘制的唯一元素,它仅仅是为了举例,我需要绘图和文本块以适应按钮,我怎么能实现这一点? –

+0

@eranotzer:那么,如果你定义了形状的大小,它应该可以工作。画布对于绝对定位非常有用,如果每个形状都居中,则可以将它们放置在网格中。 –