Je viens d'un environnement Windows Forms et je suis un peu confus sur ce qui serait considéré comme la meilleure pratique pour contrôler l'affichage d'un contrôle. Je travaille sur un Control que je veux un peu "Eye Candy". Dans WinForms je remplacerais l'événement Paint pour faire n'importe quel type de programmation visuelle. Je comprends que la principale raison pour laquelle WPF a été conçu est de séparer l'action de l'affichage.Modèles de contrôle personnalisés, affichage et WPF
Voici la partie dont je ne suis pas sûr. Dites que je veux dessiner quelques lignes simples dans le "Background" du contrôle. Serait-ce une bonne pratique d'ajouter les lignes dans le modèle ou de faire le dessin des lignes dans le code derrière comme je le ferais dans WinForms?
Par exemple dire que je développe un contrôle nommé CustomControl1 et que vous souhaitez tracer une ligne sur toute la largeur du contrôle qui est centré verticalement comme:
Serait-il préférable de faire la ligne le code derrière ou dans le modèle?
je peux le faire tout en XAML comme ceci:
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid HorizontalAlignment="Left" Width="{Binding ActualWidth}">
<Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Aqua">
<Path Stretch="Fill" Stroke="Black" StrokeThickness="1" Data="M 0,0.5 H 1" />
</Border>
<TextBlock
HorizontalAlignment="Center"
Text="Some Text" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Je ne sais pas si cela est la « meilleure pratique » ou s'il y a une autre façon que je devrais utiliser tous ensemble? Y a-t-il une raison pour utiliser l'un plutôt que l'autre? Y a-t-il des gains/pertes de performance?
La structure visuelle d'un contrôle WPF est généralement définie par sa propriété Template, qui est définie dans un style (par défaut). Voir par exemple les sections * Notes * et * Examples * sur la page [ControlTemplate] (https://msdn.microsoft.com/en-us/library/system.windows.controls.controltemplate (v = vs.110) .aspx) sur MSDN. La section * Control Templates * de la page [Styling and Templating] (https://msdn.microsoft.com/fr-fr/library/ms745683 (v = vs.110) .aspx) peut également vous être utile. – Clemens