Je ne connais pas WPF et je l'apprends maintenant. Je cherchais des coins arrondis TextBox
dans WPF. J'ai donc recherché Google et trouvé un morceau de XAML
:
<!–Rounded Corner TextBoxes–>
<ControlTemplate x:Key=”RoundTxtBoxBaseControlTemplate” TargetType=”{x:Type Control}”>
<Border Background=”{TemplateBinding Background}” x:Name=”Bd” BorderBrush=”{TemplateBinding BorderBrush}”
BorderThickness=”{TemplateBinding BorderThickness}” CornerRadius=”6″>
<ScrollViewer x:Name=”PART_ContentHost”/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property=”IsEnabled” Value=”False”>
<Setter Property=”Background” Value=”{DynamicResource {x:Static SystemColors.ControlBrushKey}}” TargetName=”Bd”/>
<Setter Property=”Foreground” Value=”{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}”/>
</Trigger>
<Trigger Property=”Width” Value=”Auto”>
<Setter Property=”MinWidth” Value=”100″/>
</Trigger>
<Trigger Property=”Height” Value=”Auto”>
<Setter Property=”MinHeight” Value=”20″/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Alors, dites-moi où coller ce XAML
. Veuillez m'aider en détail. Je suis un débutant dans WPF.
Dans WPF, vous pouvez modifier ou recréer l'apparence des contrôles. Donc, si votre exemple, ce qu'ils ont fait, ils ont changé l'apparence de la TextBox en modifiant le ControlTemplate
du TextBox
existant. Donc, pour voir et explorer le morceau de code, utilisez simplement le code ci-dessous
<Window x:Class="WpfApplication4.Window1"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ControlTemplate x:Key="TextBoxBaseControlTemplate" TargetType="{x:Type TextBoxBase}">
<Border Background="{TemplateBinding Background}"
x:Name="Bd" BorderBrush="Black"
BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
<ScrollViewer x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" TargetName="Bd"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
<Trigger Property="Width" Value="Auto">
<Setter Property="MinWidth" Value="100"/>
</Trigger>
<Trigger Property="Height" Value="Auto">
<Setter Property="MinHeight" Value="20"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
<Grid>
<TextBox Template="{StaticResource TextBoxBaseControlTemplate}" Height="25" Margin="5"></TextBox>
</Grid>
Nous avons donc déclaré une ressource statique dans la section Ressource de la fenêtre et nous avons utilisé la ressource TextBoxBaseControlTemplate dans la propriété Template
de la TextBox
comme Template="{StaticResource TextBoxBaseControlTemplate}"
.
Les modèles pour personnaliser les contrôles WPF se réfèrent simplement à ce document pour se faire une idée
@Smolla avait une bien meilleure réponse dans son commentaire sur la réponse de @Daniel Casserly:
<TextBox Text="TextBox with CornerRadius">
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="3"/>
</Style>
</TextBox.Resources>
</TextBox>
Si vous souhaitez que toutes les bordures des TextBox et des ListBox aient des coins arrondis, mettez le style dans la fenêtre de votre application ou de votre application <Resources>
.
Vous pouvez modifier toutes les zones de texte pour avoir des coins arrondis en utilisant le style suivant:
<Style TargetType="{x:Type TextBox}">
<Style.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="3" />
</Style>
</Style.Resources>
</Style>
Inspiré par la réponse suivante: https://stackoverflow.com/a/13858357/338745
cette question est bien discutée sur msdn: http://social.msdn.Microsoft.com/forums/en-US/wpf/thread/549775ed-1c2a-4911-9078-d9c724294fb3/
Essayez les solutions là-bas, elles sont assez détaillées et certainement assez détaillées pour que vous sachiez où mettre le code.
Définissez simplement BorderThicknessof textbox sur zéro, ajoutez une bordure autour de la zone de texte.
<Border BorderThickness="1" BorderBrush="Black" CornerRadius="10" Padding="2"
HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox Text="Hello ! " BorderThickness="0"/>
</Border>
Vous pouvez utiliser les propriétés attachées pour définir le rayon de bordure TextBox
(la même chose fonctionnera également pour les boutons).
Créer une classe pour la propriété attachée
public class CornerRadiusSetter
{
public static CornerRadius GetCornerRadius(DependencyObject obj) => (CornerRadius)obj.GetValue(CornerRadiusProperty);
public static void SetCornerRadius(DependencyObject obj, CornerRadius value) => obj.SetValue(CornerRadiusProperty, value);
public static readonly DependencyProperty CornerRadiusProperty =
DependencyProperty.RegisterAttached(nameof(Border.CornerRadius), typeof(CornerRadius),
typeof(CornerRadiusSetter), new UIPropertyMetadata(new CornerRadius(), CornerRadiusChangedCallback));
public static void CornerRadiusChangedCallback(object sender, DependencyPropertyChangedEventArgs e)
{
Control control = sender as Control;
if (control == null) return;
control.Loaded -= Control_Loaded;
control.Loaded += Control_Loaded;
}
private static void Control_Loaded(object sender, EventArgs e)
{
Control control = sender as Control;
if (control == null || control.Template == null) return;
control.ApplyTemplate();
Border border = control.Template.FindName("border", control) as Border;
if (border == null) return;
border.CornerRadius = GetCornerRadius(control);
}
}
Ensuite, vous pouvez utiliser la syntaxe de propriété attachée pour styliser plusieurs zones de texte sans doublons de style:
<TextBox local:CornerRadiusSetter.CornerRadius="10" />
<TextBox local:CornerRadiusSetter.CornerRadius="5, 0, 0, 5" />
<TextBox local:CornerRadiusSetter.CornerRadius="10, 4, 18, 7" />