WPF选项卡控件如何占用最大选项卡的大小

9
我有一个TabControl,它绑定了一组Viewmodel,并将其转换为适合在选项卡中绘制的格式:
<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始终以其任何子元素的最大宽度和高度进行绘制。 让WPF Tabcontrol的高度等于最大项的高度? 在答案中提到了几种实现方式(据我所知):
  • 使用具有SharedSizeGroup的Grid - 似乎需要应用于TabControl实际内容中的DataTemplate,这会覆盖由资源字典中创建的VM->View映射实现的自动化视图绘制
  • 使用宽度/高度转换器,这将要求我的TabControl绑定到UI元素的集合而不是视图模型
有没有人解决过类似的问题?每次取得进展时,我似乎都会遇到更多障碍。

这个答案可能是正确的方向。我认为你需要使用ItemsContainerGenerator生成每个元素的UI项,确定该项的大小(也许使用 这个答案中的代码?)来计算最大尺寸。 - Rachel
@zepee,你找到解决方案了吗? - Jayakrishnan
2个回答

0
如果有其他人遇到了这个问题,我在窗口的ContentRendered事件处理程序中使用以下代码解决了它:
tabControl.SelectedIndex = 1;
UpdateLayout();
SizeToContent = SizeToContent.Manual;
tabControl.SelectedIndex = 0;

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


0

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

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

隐藏控件有什么作用?为什么不硬编码数字而是使用绑定? - Grault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接