我正在尝试创建一个TabControl,它匹配我在WinForms中使用的现有选项卡控件的样式,其中一个功能是它具有类似于VS中的选项卡按钮形状(左侧倾斜,其他边缘方形)。
我刚开始使用WPF,所以也许我正在咆哮错误的树,但我想我需要获得一个Border,并将它附加到Path,以便我可以为边框指定一些几何体。 ..但是,我只是找不到任何有用的信息。我在S / O上找到了一个'FreeFormContentControl'类,但这是用于将内容屏蔽到特定形状,而不是在特定形状中围绕它绘制边框。
如果有人能指出我正确的方向,我会非常感激!
答案 0 :(得分:2)
您可以根据每一方的单个值指定Border的属性BorderThickness和CornerRadius,例如:
<Border CornerRadius="2,2,0,0" BorderThickness="2,2,2,0"/>
它将topLeft和topRight角半径设置为2,左,顶部和右边框部分设置为2.
<强>更新强>
您也可以创建自定义Adorner。更多信息提供by this MSDN Article
只需在TabItem控件模板中添加一些自定义几何体。提供了更多信息this MSDN Article
<强>样品强>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid>
<Viewbox Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Stretch="Fill" StretchDirection="DownOnly">
<Path x:Name="path" Stretch="Fill" Stroke="Black" Fill="{StaticResource LightBrush}" Width="Auto" Height="Auto" Data="M 0,20 L 0,5 5,0 100,0 100,20 "/>
</Viewbox>
<Border Visibility="Visible"
x:Name="Border"
Margin="5,1,0,1" >
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
Margin="12,2,12,2"
RecognizesAccessKey="True"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Panel.ZIndex" Value="100" />
<Setter TargetName="path" Property="Fill" Value="{StaticResource WindowBackgroundBrush}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="path" Property="Fill" Value="{StaticResource DisabledBackgroundBrush}" />
<Setter TargetName="path" Property="Stroke" Value="{StaticResource DisabledBorderBrush}" />
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>