WPF:在Border下标签CornerRadius

时间:2017-03-23 12:30:02

标签: wpf styles groupbox

这是我的自定义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>

enter image description here

所以我想设置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角落的任何建议吗?

2 个答案:

答案 0 :(得分:3)

将以下内容添加到样式中,您的标签上会出现圆角。我随意将其设置为“3”,但你可以根据自己的需要设置它。

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

将以上代码添加到windows.resources并在标签Style =“{StaticResource MyLabelStyle}”

{{1}}

答案 1 :(得分:1)

您必须将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模板样式。