WPF中的自定义形状边框

时间:2010-07-19 13:47:11

标签: wpf drawing border

我正在尝试创建一个TabControl,它匹配我在WinForms中使用的现有选项卡控件的样式,其中一个功能是它具有类似于VS中的选项卡按钮形状(左侧倾斜,其他边缘方形)。

我刚开始使用WPF,所以也许我正在咆哮错误的树,但我想我需要获得一个Border,并将它附加到Path,以便我可以为边框指定一些几何体。 ..但是,我只是找不到任何有用的信息。我在S / O上找到了一个'FreeFormContentControl'类,但这是用于将内容屏蔽到特定形状,而不是在特定形状中围绕它绘制边框。

如果有人能指出我正确的方向,我会非常感激!

1 个答案:

答案 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>