【问题标题】:how to maintain the Width of tabItems should be equal in WPF?如何在 WPF 中保持 tabItems 的宽度应该相等?
【发布时间】:2014-01-22 07:19:00
【问题描述】:

如果我打开多个 tabItems,如何保持 tabItems 的宽度应该相等。知道我没有得到这个东西。我尝试了以下代码

HorizontalContentAlignment="stretch"

我使用了上面的代码,但它不起作用。但我越来越喜欢了

对于tabcontrol,我编写了以下代码

<TabControl Name="tabControl1" Margin="175,44,0,0"  >

            <Grid></Grid>
    </TabControl>

tabItems 会动态添加到 Tabcontrol 中

TabItem tabitem2 = new TabItem();
        Page2 pgobj1 = new Page2();
        Frame tabframe1 = new Frame();
        tabframe1.Content = pgobj1;
        tabitem2.Header = "Tab 2Tab 2Tab 3";
        tabitem2.Width = 300;
        tabitem2.Content = tabframe1;          
        tabControl1.Items.Add(tabitem2);
        tabitem2.IsSelected = true; 

我不希望 tabItems 之间有这些空格。如果打开更多选项卡,它们会自动调整大小。请帮帮我。

移除硬编码宽度属性后

它是这样的

【问题讨论】:

  • 发布相关的 XAML 代码。
  • @RohitVats 我更新了我的问题

标签: c# wpf width tabcontrol tabitem


【解决方案1】:

删除您在 TabItem 上设置的硬编码宽度。无需设置,TabItem 会根据页眉内容自动调整宽度。

tabitem2.Width = 300; // Remove this line

如果您希望项目进入单行并使用 ScrollViewer 滚动,您需要修改 TabControl 的模板,如提到的 here。为了回答的完整性,我从那里发布代码:

    <TabControl Name="tabControl1">
        <TabControl.Template>
            <ControlTemplate TargetType="TabControl">
                <StackPanel>
                    <ScrollViewer HorizontalScrollBarVisibility="Auto" 
                                  VerticalScrollBarVisibility="Disabled">
                        <TabPanel x:Name="HeaderPanel"
                          Panel.ZIndex ="1" 
                          KeyboardNavigation.TabIndex="1"
                          Grid.Column="0"
                          Grid.Row="0"
                          Margin="2,2,2,0"
                          IsItemsHost="true"/>
                    </ScrollViewer>
                    <ContentPresenter x:Name="PART_SelectedContentHost"
                                      SnapsToDevicePixels="{TemplateBinding 
                                                            SnapsToDevicePixels}"
                                      Margin="{TemplateBinding Padding}"
                                      ContentSource="SelectedContent"/>
                </StackPanel>
            </ControlTemplate>
        </TabControl.Template>
    </TabControl>

还可以查看这个答案here

【讨论】:

  • 如果我删除该行,它将进入新行。如何限制那个
  • 下一行是哪一行?
  • 如果实际窗口大小不适合 tabItems,它们会像您在快照中发布的那样移动。这就是 tabItems 在 Windows 中的工作方式。这不是你需要的吗?
  • 你能告诉我如何将tabControl限制为一行
  • 无法容纳的tabItems怎么办?你想用这些 tabItems 做什么?
【解决方案2】:

如果我理解正确,您希望所有选项卡项的宽度都相同。您可以通过使用ColumnDefinition 将每个选项卡项标题包装在Grid 中来实现这一点,该SharedSizeGroup 使用SharedSizeGroup。此外,您必须像这样标记TabControl

<TabControl x:Name="tabControl1" Grid.IsSharedSizeScope="True">

以下代码显示了如何以编程方式设置Header 属性:

Grid grid = new Grid();
grid.ColumnDefinitions.Add(new ColumnDefinition
    {
        SharedSizeGroup = "MySharedSizedGroupName",
        Width = new GridLength(1.0, GridUnitType.Auto)
    });
grid.Children.Add(new TextBlock{Text="Tab 5"});
tabitem2.Header = grid;

编辑:还有一点:我认为您作为孩子添加到TabControl&lt;Grid&gt;&lt;/Grid&gt; 是不必要的,因为它在第一个左侧创建了那个空选项卡标签行。

【讨论】:

猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多