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
模板的样式。
这是我的习惯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
模板的样式。