2012-06-17 18 views
1

我正在创建一个测试WPF项目(计算器)来测试命令绑定和日志记录的实现。基本布局是网格。计算器的显示器是一个跨两列并伸展以填充所有可用空间的文本框。这工作正常,但我想调整主窗体调整大小时使用ViewBox调整显示中的文本。我试着用几种方法介绍ViewBox,但是当显示器中的文本调整好后,TextBox不再伸展以填充所有空间。如何使ViewBox在具有ColumnSpan的Grid单元内伸展?

我该如何解决这个问题?下面的XAML。

<Grid> 
     <Grid.Resources> 
      <Style TargetType="Label"> 
       <Setter Property="Margin" Value="5"/> 
      </Style> 
      <Style TargetType="TextBox"> 
       <Setter Property="Margin" Value="5"/> 
      </Style> 
      <Style TargetType="Button"> 
       <Setter Property="Margin" Value="5"/> 
      </Style> 
     </Grid.Resources> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Button Grid.Column="0" Grid.Row="1">M+</Button> 
     <Button Grid.Column="0" Grid.Row="2">MR</Button> 
     <Button Grid.Column="1" Grid.Row="2" 
       Click="Button_Click">1</Button> 
     <Button Grid.Column="2" Grid.Row="2" 
       Click="Button_Click">2</Button> 
     <Button Grid.Column="3" Grid.Row="2" 
       Click="Button_Click">3</Button> 
     <Button Grid.Column="1" Grid.Row="3" 
       Click="Button_Click">4</Button> 
     <Button Grid.Column="2" Grid.Row="3" 
       Click="Button_Click">5</Button> 
     <Button Grid.Column="3" Grid.Row="3" 
       Click="Button_Click">6</Button> 
     <Button Grid.Column="1" Grid.Row="4" 
       Click="Button_Click">7</Button> 
     <Button Grid.Column="2" Grid.Row="4" 
       Click="Button_Click">8</Button> 
     <Button Grid.Column="3" Grid.Row="4" 
       Click="Button_Click">9</Button> 
     <Button Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="5" 
       Click="Button_Click">0</Button> 
     <Button Grid.Column="3" Grid.Row="5" 
       Click="Button_Click">.</Button> 
     <Button Grid.Column="4" Grid.Row="2">=</Button> 
     <Button Grid.Column="4" Grid.Row="3">+</Button> 
     <Button Grid.Column="4" Grid.Row="4">-</Button> 
     <Button Grid.Column="5" Grid.Row="3">x</Button> 
     <Button Grid.Column="5" Grid.Row="4">:</Button> 
     <Button Grid.Column="4" Grid.Row="1">C</Button> 
     <Button Grid.Column="5" Grid.Row="1">CE</Button> 
     <Viewbox Grid.Column="1" Grid.Row="1"> 
      <Label >M</Label> 
     </Viewbox> 
     <!-- Display --> 
     <TextBox Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="2" 
       HorizontalContentAlignment="Right" 
       Text="{Binding CurrentValue}"/> 
    </Grid> 

回答

1
<Viewbox Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="2" > 
     <TextBox Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Viewbox}, Path=ActualWidth}"  
      HorizontalContentAlignment="Stretch" 
      Text="{Binding CurrentValue}"/> 
</Viewbox> 

这对我的作品。然后我的队友去pfft!只是这样做

<Viewbox Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="2" > 
     <TextBox Width="100"  
     HorizontalContentAlignment="Stretch" 
     Text="{Binding CurrentValue}"/> 
</Viewbox> 

而WOW的作品好了很多

+0

谢谢。你的队友的答案令人惊讶的是更好的答案。但是,任何使文本框的高度等于按钮的尝试都会导致文本缩小。 – Dabblernl

+0

只要把你的按钮放在视框中,如果你担心这一点。不要忘了给它们一个宽度,因此viewbox可以正确缩放它们 – Nogusta