WPF Tabcontrol占用最大选项卡的大小

时间:2015-07-07 11:57:36

标签: c# wpf tabcontrol

我有一个TabControl绑定到Viewmodels集合,它被转换为适合绘制到选项卡中的选项:

<Window.Resources>
    <ResourceDictionary>
        <DataTemplate DataType="{x:Type charting:LineFormatViewModel}">
            <charting:LineFormatView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type charting:IndexSettingsViewModel}">
            <charting:IndexSettingsView />
        </DataTemplate>
        ....
    </ResourceDictionary>
</Window.Resources>

<TabControl ItemSource="Binding ViewModels" />

我一直试图找到一种方法来始终在任何一个孩子的最大宽度和高度上绘制TabControl。 Let WPF Tabcontrol height assume height of largest item?提到了几种在答案中实现这一点的方法(来自我所理解的):

  • 将Grid与SharedSizeGroup一起使用 - 似乎需要在TabControl的实际内容上应用于DataTemplate,这会覆盖由资源字典
  • 中创建的VM-&gt; View映射实现的自动View图形
  • 使用宽度/高度转换器,这需要将我的TabControl绑定到UI元素的集合而不是viewmodels

有没有人有解决类似问题的经验?每当我在这方面取得一些进展时,我似乎都会碰到更多的墙壁。

2 个答案:

答案 0 :(得分:0)

您需要使用可以自动适应的命名隐藏控件 创建直接绑定到它们的宽度/高度,如:

 Width="{Binding ActualWidth, ElementName=MainGrid}"

答案 1 :(得分:0)

如果其他人遇到这个问题,我在窗口的 ContentRendered 事件处理程序中使用以下代码解决了这个问题:

tabControl.SelectedIndex = 1;
UpdateLayout();
SizeToContent = SizeToContent.Manual;
tabControl.SelectedIndex = 0;

tabsControl 是 TabControl 对象的名称。本质上,我们所做的是切换到具有最大高度的选项卡(在我的示例中为索引 1),更新窗口的布局,告诉窗口停止调整大小以适应其内容,然后切换回第一个选项卡。当然,此解决方案假设您知道哪个选项卡的高度最大,并且您不需要窗口在初始渲染后调整其内容大小。