WPF:在边框下标记 CornerRadius

WPF: label CornerRadius under Border

这是我的习惯GroupBox:

<Grid Width="550" Height="140" Margin="20,0,0,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border BorderThickness="1,1,1,0" BorderBrush="Gray" CornerRadius="5,5,0,0" >
        <Label
            Height="25"
            Width="60"
            HorizontalAlignment="Left"
            Background="#FF7AA0CD"
            BorderBrush="Gray"
            BorderThickness="1"
            Foreground="Gainsboro"
            Content=" Options"
            Margin="10,-18,0,0"/>
    </Border>
    <Border Grid.Row="1" BorderThickness="1,0,1,1" BorderBrush="Gray" CornerRadius="0,0,5,5">
        <StackPanel Orientation="Vertical" Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">
            <StackPanel Orientation="Horizontal" Margin="10,0,0,0" >
                <Label 
        Content="Interface: "
        Margin="0,3,0,0"/>
                <ComboBox
            MaxDropDownHeight="110"
            Style="{DynamicResource ComboBoxFlatStyle}"
            ItemsSource="{Binding interfaces}"
            Width="400"
            Height="28"
            SelectedIndex="1"
            FontSize="12"
            Margin="40,0,0,0"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Margin="10,2,0,0">
                <Label 
            Content="Capture filter:"
            Margin="0,3,0,0"/>
                <TextBox
            Name="tbSnifferFilter"
            Width="399"
            Height="28"
            TextChanged="tbSnifferFilter_TextChanged"
            LostFocus="tbSnifferFilter_LostFocus"
            Margin="21,0,0,0">
                    <TextBox.ToolTip>
                        <TextBlock>
                The expression selects which packets will be dumped.
                <LineBreak /> 
                If no expression is given, all packets on the net will be accepte,
                <LineBreak />
                Otherwise, only packets for which expression is `true' will be accepted.
                        </TextBlock>
                    </TextBox.ToolTip>
                </TextBox>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Margin="10,3,0,0">
                <Label 
        Content="Capture file:"
        Margin="0,3,0,0"/>
                <TextBox
            Name="tbSnifferCaptureFile"
            Width="365"
            Height="28"
            ToolTip="Capture file name."
            TextChanged="tbSnifferFilter_TextChanged"
            IsReadOnly="True"
            Margin="29,0,0,0"/>
                <Button
            Name="btnSaveCaptureFile"
            Content="..."
            Width="32"
            Height="28"
            ToolTip="Select a file to which captured data will be wirtten."                                    
            Click="btnSaveCaptureFile_Click"
            GotMouseCapture="btnSaveCaptureFile_GotMouseCapture"
            LostMouseCapture="btnSaveCaptureFile_LostMouseCapture"                                      
            Margin="3,0,0,0"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Margin="10,3,0,0">
                <Label 
            Content="Packet length:"
            Margin="0,1,0,0"/>
                <Controls:NumericUpDown
            Name="nudSnoplen" 
            Minimum="0" 
            Maximum="65535"
            Value="65535"
            StringFormat="N0"
            MinWidth="50"
            HideUpDownButtons="True"
            Width="20"
            Height="28"
            ToolTip="Length of the packet that has to be retained."
            Margin="19,0,0,0" />
                <Label
            Content="bytes"
            Margin="0,2,0,0"/>
                <CheckBox
            Name="cbPromiscuousMode"
            Content="Promiscuous mode"
            FontFamily="Ariel"
            VerticalAlignment="Top"
            IsChecked="True"
            Height="25"
            Margin="20,1,0,0">
                    <CheckBox.ToolTip>
                        <TextBlock>
                In normal operation, an adapter only captures packets from the network that,
                <LineBreak /> 
                are destined to it, the packets exchanged by other hosts are therefore ignored.
                <LineBreak />
                Instead, when the adapter is in promiscuous mode it captures all packets,
                <LineBreak />
                whether they are destined to it or not.
                        </TextBlock>
                    </CheckBox.ToolTip>
                </CheckBox>
            </StackPanel>
        </StackPanel>
    </Border>
</Grid>

所以我想设置我的 Label CornerRadius 并且我尝试将这个 Label 放在另一个 Border 中,但似乎 The property "Child" can only be set once. 有什么关于如何绕过我的 Label 角落的建议吗?

所以我想设置我的 Label CornerRadius 并且我尝试将这个 Label 放在另一个 Border 中,但似乎 The property "Child" can only be set once. 有什么关于如何绕过我的 Label 角落的建议吗?

将以下内容添加到您的样式中,您将在标签上获得圆角边缘。我在下面任意将其设置为“3”,但您可以将其设置为您需要的任何值。

<Window.Resources>
    <Style  x:Key="MyLabelStyle" TargetType="Label">
        <Setter Property="Template">
      <Setter.Value>
    <ControlTemplate TargetType="{x:Type Label}">
        <Border BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            Padding="{TemplateBinding Padding}" 
            SnapsToDevicePixels="true" 
            CornerRadius="3">
            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</Setter.Value>
</Setter>
    </Style>
</Window.Resources>

将以上代码添加到 windows.resources 和您的标签 Style="{StaticResource MyLabelStyle}"

<Label Style="{StaticResource MyLabelStyle}"></Label>

您必须将您的 Label 放入 Border

<Border BorderThickness="1,1,1,0"
        BorderBrush="Gray"
        CornerRadius="5,5,0,0">
    <Border Margin="10,-18,0,0"
            Background="#FF7AA0CD"
            BorderBrush="Gray"
            Height="25"
            CornerRadius="5"
            Width="60"
            HorizontalAlignment="Left">
    <Label BorderThickness="1"
           Foreground="Gainsboro"
           Content=" Options"/>
    </Border>
</Border>

但最好的方法是设置默认 GroupBox 模板的样式。