有没有办法让TabControl上的最后一个标签右对齐? 想要将最后一个与前几个分开。
谢谢!
答案 0 :(得分:4)
这篇文章可能很旧,但我在寻找同一个问题的答案时偶然发现了它,所以我想我会分享我最终得到的快速而肮脏的解决方案。
我只是在Grid中将两个TabControl放在一起,并在其中一个上右对齐TabPanel(感谢前往Meleak):
<Grid>
<TabControl x:Name="_tabsRight" GotFocus="OnTabFocused" >
<TabControl.Resources>
<Style TargetType="TabPanel">
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
</TabControl.Resources>
<TabItem x:Name="JustAHiddenTabItemToDeselectTheRealOne" Visibility="Hidden" />
<!-- Last tab -->
<TabItem Header="Last one" >
<!-- Last content... -->
</TabItem>
</TabControl>
<TabControl x:Name="_tabsLeft" GotFocus="OnTabFocused" >
<!-- First tab -->
<TabItem Header="1st" >
<!-- First content... -->
</TabItem>
<!-- Second tab -->
<TabItem Header="2nd" >
<!-- Second content... -->
</TabItem>
</TabControl>
</Grid>
然后,在OnTabFocused事件处理程序中,当用户单击TabItem时,我们需要将最底部的TabControl置于前面:
private int _zIncrementor = 0;
/// <summary>
/// Hack to make two TabControls act as one.
/// </summary>
private void OnTabFocused(object sender, RoutedEventArgs e)
{
var tab = (TabControl)sender;
var otherTab = (tab == _tabsLeft) ? _tabsRight : _tabsLeft;
Grid.SetZIndex(tab, ++_zIncrementor);
otherTab.SelectedItem = null;
}
答案 1 :(得分:3)
Here是一个模板TabControl选项卡的示例项目。我可能会使用一个带有三列宽度“Auto”,*和“Auto”的Grid,并在第一列中放置一个StackPanel来保存第一组选项卡,然后在最后一列中放入最后一个选项卡列是空的,只占用剩余的空间。
答案 2 :(得分:-1)
如果您想要左侧有两个标签,右侧有一个标签,则可以在中间放置第三个不可见标签,并且可以通过减去所有三个标签中的width
来计算隐藏标签的Width
来自Actualwidth
Window
的标签,为我们提供剩余空间。
以下是示例代码
<TabControl x:Name="_tabsLeft" GotFocus="OnTabFocused" >
<!-- First tab -->
<TabItem Header="1st" >
<!-- First content... -->
</TabItem>
<!-- Second tab -->
<TabItem Header="2nd" >
<!-- Second content... -->
</TabItem>
<!-- Third invisible tab -->
<TabItem Header="Im not visible in UI" Visibility="Hidden" x:Name="invisibletab" >
<!-- I'm not visible in UI... -->
</TabItem>
<!-- Last tab -->
<TabItem Header="Last one" >
<!-- Last content... -->
</TabItem>
</TabControl>
后端代码:
public MainWindow()
{
InitializeComponent();
this.SizeChanged += window_SizeChanged;
}
private void window_SizeChanged(object sender, SizeChangedEventArgs e)
{
invisibletab.Width = this.ActualWidth - 550; // where the 550 is the sum of the actual width of visible tabs
}