Silverlight Fieldset控件

时间:2010-11-05 10:11:19

标签: silverlight controls fieldset

我一直错过了Silverlight中经典的HTML字体集,我在网上找不到任何解决方案。我如何建立一个?

2 个答案:

答案 0 :(得分: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代码道歉。

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

答案 1 :(得分:0)