WPF Round corner textbox

Je ne connais pas WPF et je l'apprends maintenant. J'ai été à la recherche pour les coins arrondis TextBox dans WPF. Alors J'ai cherché Google et j'ai 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 merci de me dire où coller ce XAML. S'il vous plaît aidez-moi en détail. Je suis un débutant en WPF.

33
demandé sur Elmo 2011-01-24 10:57:45

6 réponses

dans WPF vous pouvez modifier ou recréer l'apparence des contrôles. Donc si votre exemple ce qu'ils ont fait est qu'ils ont changé l'apparence de la zone de texte en modifiant le ControlTemplate de l'existant TextBox. Alors pour voir et explorer le morceau de code il suffit d'utiliser 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 le Template propriété de l' TextBox comme Template="{StaticResource TextBoxBaseControlTemplate}" .

Modèles pour Personnaliser les Contrôles WPF juste faire référence à ce document pour avoir une idée

http://msdn.microsoft.com/en-us/magazine/cc163497.aspx

53
répondu Kishore Kumar 2013-03-06 16:49:26

@Smolla a eu 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 voulez que toutes les bordures des boîtes de textes et des boîtes aux lettres aient des coins arrondis, mettez le style dans votre fenêtre ou application <Resources>.

28
répondu cheeesus 2015-07-22 07:16:29

cette question est bien discutée au msdn: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/549775ed-1c2a-4911-9078-d9c724294fb3/

essayez les solutions là, elles sont assez détaillées et certainement assez détaillées pour que vous sachiez où placer le code.

4
répondu Daniel Casserly 2011-01-24 08:10:37

Vous pouvez changer toutes les boîtes 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/3387453

3
répondu Class Skeleton 2018-04-01 19:36:13

venez de définir BorderThicknessof zone de texte à zéro ajouter 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>

la Sortie est, comme indiqué dans l'image! Output!

2
répondu Thunder 2016-06-08 12:03:15

vous pouvez utiliser les propriétés attachées pour définir TextBox border radius (la même chose fonctionnera pour les boutons).

Créer une classe pour les attachés de la propriété

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 au style de plusieurs boîtes de texte sans duplicata de style:

<TextBox local:CornerRadiusSetter.CornerRadius="10" />
<TextBox local:CornerRadiusSetter.CornerRadius="5, 0, 0, 5" />
<TextBox local:CornerRadiusSetter.CornerRadius="10, 4, 18, 7" />
2
répondu Vadim Ovchinnikov 2018-06-23 06:27:59