2012-03-22 93 views
2

我有一个WPF TabControl,包含两个不同宽度和高度的TabItems。奇怪的是,当我在项目之间切换时,TabControl的大小被调整为紧密匹配选定的选项卡项目。例如,如果我点击较小的TabITem,TabControl会变小,如果我选择较大的一个,它会变得更大。TabControl总是调整大小到选定的选项卡项目?

我想这会看起来但从用户的角度傻了,这不正常标签GUI的情况下,如Windows性能。是否可以设置宽度和高度以适合最大的项目?我想尝试避免设定一个恒定值

+0

如果我的屏幕太小会发生什么?拉伸tabcontrol并将scrollviewer作为第一个孩子不是更好吗? – Silvermind 2012-03-22 08:43:48

回答

0

好吧,如果你不希望有一个固定的大小,我看到另一个选项,但这个不便宜在性能方面。 你需要知道的是第二个标签需要的acutal宽度和高度。这意味着您可以将TabControl的高度和宽度绑定到较大项目的DesiredSize以及一些额外的空间。 但作为第二个项目可能不会已经测量(检查IsMeasureValid属性),那么你需要调用UpdateLayout请其做为控制整个布点。

但总的来说,我真的不会推荐你去那条路,因为玩布局通常是痛苦的....。 我知道这不是你要求的,而是来自经验 - >不要这样做。

为什么真的不给出一个固定的大小,并添加scrollviewers?或者我们是一个dockpanel并将所有的东西都放置在某个地方,然后给tabcontrol留下剩余的空间,这样它总会填满你的窗口。

心连心 马丁

3

你最好有相对固定窗口的大小一个TabControl的大小,让根据TabControl的大小调整大小的TabItems。

编辑:

确保包含TabControl的行或列不是自动大小。如果您的代码如下所示,您的TabControl将根据活动的TabItem调整大小。

 <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height=".20*"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height=".20*"/> 
     </Grid.RowDefinitions> 
     <TabControl Grid.Row="1" BorderBrush="Red" BorderThickness="1"> 
      <TabItem Header="Blue"> 
       <Rectangle Width="200" Height="200" Fill="Blue"></Rectangle> 
      </TabItem> 
      <TabItem Header="Black"> 
       <Rectangle Width="100" Height="100" Fill="Black"></Rectangle> 
      </TabItem> 
     </TabControl> 
    </Grid> 

如果你在上面的代码更改行<RowDefinition Height="Auto"/><RowDefinition Height="*"/>它会解决这个问题。

你也可以分享代码,我们可以看看它。

相关问题