Я подумал, что построю один.
Вероятно, это не лучший способ решить эту проблему, но он работает, и я просто подумал, что поделюсь этим, потому что такое чувство, что другие могут искать то же самое.
Простое решение, вы можете установить FontSize, Foreground и заголовок легенды.
Markup:
<Controls:Fieldset BorderBrush="#FFcccccc" Legend="LegendHeader" LegendFontSize="14" LegendForeground="Green">
<Button Content="Button" />
</Controls:Fieldset>
Стиль управления:
<Style TargetType="Controls:Fieldset">
<Setter Property="Padding" Value="10"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="BorderBrush" Value="#FFcccccc"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="LegendFontSize" Value="14"/>
<Setter Property="LegendForeground" Value="Black"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Controls:Fieldset">
<Grid x:Name="LayoutRoot" Margin="{TemplateBinding Margin}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="5"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="5"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border BorderThickness="1,1,0,0" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="5,0,0,0"/>
<Border Grid.Column="1" BorderThickness="0,1,0,0" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"/>
<Border Grid.Column="3" BorderThickness="0,1,0,0" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"/>
<Border Grid.Column="4" BorderThickness="0,1,1,0" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="0,5,0,0"/>
<Border Grid.ColumnSpan="5" Grid.Row="1" BorderThickness="1,0,1,1" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="0,0,5,5"/>
<Border Background="{TemplateBinding Background}" Margin="0,1,0,0" Grid.Column="2"/>
<Grid Grid.Column="2" Margin="10,-30,10,-30">
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="{TemplateBinding LegendFontSize}" Foreground="{TemplateBinding LegendForeground}" Text="{TemplateBinding Legend}"/>
</Grid>
<Border Background="{TemplateBinding Background}" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3"/>
<ContentPresenter
Grid.Column="1"
Grid.ColumnSpan="3"
Grid.Row="1"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
И класс:
Public Class Fieldset
Inherits ContentControl
Public Sub New()
End Sub
Public Shared ReadOnly LegendProperty As DependencyProperty = DependencyProperty.
Register("Legend", GetType(String), GetType(Fieldset), New PropertyMetadata(AddressOf OnLegendChanged))
Private Shared Sub OnLegendChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim fieldset = TryCast(d, Fieldset)
fieldset.Legend = e.NewValue.ToString()
End Sub
Public Property Legend As String
Get
Return Me.GetValue(LegendProperty).ToString()
End Get
Set(ByVal value As String)
MyBase.SetValue(LegendProperty, value)
End Set
End Property
Public Shared ReadOnly LegendFontSizeProperty As DependencyProperty = DependencyProperty.
Register("LegendFontSize", GetType(Double), GetType(Fieldset), New PropertyMetadata(AddressOf OnLegendFontSizeChanged))
Private Shared Sub OnLegendFontSizeChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim fieldset = TryCast(d, Fieldset)
fieldset.LegendFontSize = CDbl(e.NewValue)
End Sub
Public Property LegendFontSize As Double
Get
Return CDbl(Me.GetValue(LegendFontSizeProperty))
End Get
Set(ByVal value As Double)
MyBase.SetValue(LegendFontSizeProperty, value)
End Set
End Property
Public Shared ReadOnly LegendForegroundProperty As DependencyProperty = DependencyProperty.
Register("LegendForeground", GetType(SolidColorBrush), GetType(Fieldset), New PropertyMetadata(AddressOf OnLegendForegroundChanged))
Private Shared Sub OnLegendForegroundChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim fieldset = TryCast(d, Fieldset)
fieldset.LegendForeground = DirectCast(e.NewValue, SolidColorBrush)
End Sub
Public Property LegendForeground As SolidColorBrush
Get
Return DirectCast(Me.GetValue(LegendForegroundProperty), SolidColorBrush)
End Get
Set(ByVal value As SolidColorBrush)
MyBase.SetValue(LegendForegroundProperty, value)
End Set
End Property
End Class
Я прошу прощения за код VB.NET.
Как я уже сказал, возможно, есть много лучших решений, но здесь все идет.