Il me manquait le classique Fieldset de HTML dans Silverlight et je n'ai pas trouvé de solutions sur le web. Comment puis-je en construire un?Silverlight Fieldset Control
Répondre
J'ai pensé que je vais en construire un.
Ce n'est probablement pas la meilleure façon de le résoudre, mais cela fonctionne et j'ai juste pensé que je le partagerais parce que j'ai l'impression que d'autres pourraient chercher la même chose.
Une solution simple cependant, vous pouvez définir FontSize, Foreground et le titre de la légende.
Markup:
<Controls:Fieldset BorderBrush="#FFcccccc" Legend="LegendHeader" LegendFontSize="14" LegendForeground="Green">
<Button Content="Button" />
</Controls:Fieldset>
Style de contrôle:
<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>
et classe:
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
Je présente mes excuses pour le code VB.NET.
Comme je l'ai dit, probablement beaucoup de meilleures solutions mais ici va.
Je suis au courant de deux options:
Utilisez un contrôle Fieldset sans tiers:
http://www.vectorlight.net/silverlight/controls/fieldset.aspx
http://www.vectorlight.net/silverlight/controls/fieldset/reference.aspxPensez à utiliser un DataForm, avec spécifique forme supplémentaire fonctionnalité:
http://www.silverlightshow.net/items/Creating-Rich-Data-Forms-in-Silverlight-3-Introduction.aspx
- 1. Silverlight Scheduling Control
- 2. Silverlight Docking Control
- 3. Silverlight Control Lifecycle
- 4. Silverlight 4 dropdown control
- 5. Fieldset à l'intérieur du fieldset
- 6. Silverlight 4 - Print Items Control
- 7. Silverlight 4 MVVM TreeView Control
- 8. Silverlight Dynamic Control n'affiche pas
- 9. Liaison Silverlight dans Pivot Control
- 10. Symboles de débogage de Silverlight Control Toolkit
- 11. Silverlight 4 Equivalent à .NET Timer Control
- 12. Silverlight + ItemsControl + Valeur de propriété Get Control
- 13. Silverlight Control Template Propriété de couleur
- 14. Rendu personnalisé dans Bing Silverlight Control
- 15. Basic Bing Silverlight Control Exemple ASP.NET C#
- 16. Ajouter RubberBand sur Silverlight Image Control
- 17. Silverlight Custom Control Créer un événement personnalisé
- 18. asp.net validationgroup sur fieldset
- 19. Élément FieldSet dans ASP.net
- 20. Un problème avec fieldset
- 21. Silverlight DataGrid Control - Comment arrêter le tri sur une colonne?
- 22. Silverlight Control ne va pas plus haut que 600, bug?
- 23. Silverlight control voir l'image avec un zoom avant/arrière?
- 24. Silverlight Control Toolkit TreeView ne rend pas les éléments
- 25. Silverlight ImageBrush ne restitue pas (avec Bing Map Control)
- 26. Comment lire les valeurs de pixels dans Silverlight Image control?
- 27. Coins arrondis sur un fieldset
- 28. fieldset firefox débordement correctif CSS
- 29. Validation sur fieldset. Le fieldset est à l'intérieur du formulaire et a des entrées à l'extérieur
- 30. Dois-je utiliser un fieldset pour cela?