2010-11-05 69 views

回答

1

我想我会建立一个。

这可能不是最好的解决方法,但它的工作原理,我只是觉得我会分享它,因为它感觉像其他人可能会寻找同样的事情。

尽管简单的解决方案,您可以设置图例的FontSize,Foreground和标题。

标记:

<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代码道歉。

正如我所说,可能有很多更好的解决方案,但在这里。