我使用TabControl来托管工作区,使用John Smith撰写的这篇神奇文章中概述的方法.我想知道是否有一种方法可以在没有标签的情况下向标签控件添加内容,如图像.排序默认或空行为.我想要一个应用程序徽标,或者一些有用的箭头,这是Chrome首次使用的标签.
编辑:这可能有点复杂.我在下面的标准tabcontrol上尝试了Chad的解决方案.但是,我用于工作空间的tabcontrol是由使用datatemplate的内容控件呈现的,我无法使用它来解决它的问题.HB的解决方案适用于一些变化.
<DataTemplate x:Key="WorkspacesTemplate">
<Grid>
<Image Name="image1" Stretch="Uniform" Source="/Affinity;component/Images/affinity_logo.png" Margin="20"/>
<TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}"
ItemTemplate="{StaticResource ClosableTabItemTemplate}" Margin="4">
<TabControl.Style>
<Style TargetType="TabControl">
<Style.Triggers>
<DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}"
Value="0">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Style>
<TabControl.Template>
<ControlTemplate TargetType="TabControl">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden" >
<StackPanel x:Name="HeaderPanel"
Orientation="Horizontal"
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" Grid.Row="1"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Margin="{TemplateBinding Padding}"
ContentSource="SelectedContent"/>
</Grid>
</ControlTemplate>
</TabControl.Template>
</TabControl>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
您可以在图像上叠加TabControl,如果其中没有项目,则隐藏它,例如
<Grid>
<Image />
<TabControl>
<TabControl.Style>
<Style TargetType="TabControl">
<Style.Triggers>
<DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}"
Value="0">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Style>
</TabControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
或者你也可以使用触发器交换ContentControl的内容,就像上面的方法一样,两个控件都会影响布局.例如
<ContentControl>
<ContentControl.Resources>
<Image x:Key="Image"/>
<TabControl x:Key="TabControl" ItemsSource="{Binding Data}" />
</ContentControl.Resources>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content" Value="{StaticResource TabControl}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Data.Count}"
Value="0">
<Setter Property="Content" Value="{StaticResource Image}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)
注意,这里DataTrigger应该直接绑定到中使用的相同集合TabControl.这是因为如果你绑定到TabControl.Items.Count这个绑定将打破触发器TabControl将被卸载的那一刻.
| 归档时间: |
|
| 查看次数: |
3995 次 |
| 最近记录: |