Dans WPF, nous créons des contrôles personnalisés héritant du bouton avec des graphiques xaml complètement dessinés à partir de zéro. Nous avons une bordure autour du bouton xaml et nous aimerions l'utiliser comme emplacement pour mettre à jour l'arrière-plan lorsque MouseOver = True dans un trigger. Ce que nous devons savoir, c'est comment mettre à jour l'arrière-plan de la bordure de ce bouton avec un dégradé lorsque la souris passe dessus?À l'aide de WPF, quelle est la meilleure méthode pour mettre à jour l'arrière-plan d'un contrôle de bouton personnalisé?
1
A
Répondre
3
Dans votre ControlTemplate
, donnez Border
un Name
et vous pouvez ensuite référencer cette partie de son arborescence visuelle dans les triggers. Voici un exemple très bref de restyling un Button
normal:
<Style
TargetType="{x:Type Button}">
<Setter
Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Name="customBorder"
CornerRadius="5"
BorderThickness="1"
BorderBrush="Black"
Background="{StaticResource normalButtonBG}">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger
Property="IsMouseOver"
Value="True">
<Setter
TargetName="customBorder"
Property="Background"
Value="{StaticResource hoverButtonBG}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Si cela ne fonctionne pas, nous aurons besoin d'en savoir plus, voir probablement votre propre XAML. Votre description ne me rend pas très clair quel est votre véritable arbre visuel.
0
Vous voulez ajouter un déclencheur comme celui-ci ...
Faire un style comme celui-ci:
<Style x:Key="ButtonTemplate"
TargetType="{x:Type Button}">
<Setter Property="Foreground"
Value="{StaticResource ButtonForeground}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate
TargetType="{x:Type Button}">
<Grid
SnapsToDevicePixels="True"
Margin="0,0,0,0">
<Border Height="20"
x:Name="ButtonBorder"
BorderBrush="{DynamicResource BlackBorderBrush}">
<TextBlock x:Name="button"
TextWrapping="Wrap"
Text="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}"
SnapsToDevicePixels="True"
Foreground="#FFFFFFFF"
Margin="6,0,0,0"
VerticalAlignment="Center"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<!-- Disabled -->
<Trigger Property="IsMouseOver"
Value="True">
<Setter TargetName="ButtonBorder"
Property="Background"
Value="{DynamicResource ButtonBackgroundMouseOver}" />
<Setter TargetName="ButtonBorder"
Property="BorderBrush"
Value="{DynamicResource ButtonBorderMouseOver}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ajouter ensuite des ressources pour les gradients, comme ceci:
<LinearGradientBrush x:Key="ButtonBackgroundMouseOver"
EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="#FF000000"
Offset="0.432"/>
<GradientStop Color="#FF808080"
Offset="0.9"/>
<GradientStop Color="#FF848484"
Offset="0.044"/>
<GradientStop Color="#FF787878"
Offset="0.308"/>
<GradientStop Color="#FF212121"
Offset="0.676"/>
</LinearGradientBrush>
S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'aide avec ceci.
Questions connexes
- 1. Quelle est la meilleure façon de mettre à jour une table MsAccess dans .NET
- 2. Utilisation de valeurs DataBinding pour mettre à jour la largeur d'un contrôle (WPF)
- 3. Quelle est la meilleure façon pour une application de formulaires Windows .NET de se mettre à jour?
- 4. Meilleure méthode de mise à jour pour MySQL DB
- 5. Quelle est la meilleure méthode pour l'habillage d'un volet de défilement horizontal à l'aide de jQuery?
- 6. Dans Erlang, quelle est la meilleure façon de mettre à niveau un système distribué?
- 7. meilleure méthode pour mettre à jour les données de table SQL à partir de C# .NET 2005
- 8. Quelle est la meilleure méthode pour arrêter les insertions en double dans la base de données
- 9. Quelle est la meilleure méthode python pour le chiffrement
- 10. jQuery - Si une base de données est mise à jour, mettre à jour la page
- 11. Meilleure façon de mettre à jour dans Linq To SQL
- 12. MVVM Quelle est la manière de mettre à jour une interface utilisateur après une commande?
- 13. Quelle est la meilleure méthode pour détecter xml en JavaScript
- 14. Quelle est la meilleure façon de mettre à l'échelle un octet de façon uniforme?
- 15. Quelle est la meilleure méthode pour localiser une application asp.net?
- 16. Mettre à jour le panneau de mise à jour
- 17. Quelle est la meilleure alternative à int.TryParse pour .net 1.1
- 18. Quelle est la meilleure architecture pour passer à XMPP?
- 19. comment obtenir usercontrol pour mettre à jour
- 20. wpf - afficher, mettre à jour, insérer des modes
- 21. Tutoriel WPF pour la création d'un contrôle utilisateur personnalisé
- 22. Quelle est la meilleure façon de commencer à utiliser Mylyn?
- 23. Quelle est la meilleure méthode d'exploration de données pour la recherche de véhicules?
- 24. Quelle est la méthode recommandée pour affecter une touche de raccourci CRLF au bouton
- 25. Quelle est la meilleure façon de procéder pour la validation de formulaire dans WPF (avec liaison de données)?
- 26. Problème de style de contrôle personnalisé WPF
- 27. Ajouter TextboxCell personnalisé à un contrôle DataGridView qui contient un bouton pour ouvrir le FileDialog
- 28. Quelle est la meilleure façon de lier un contrôle Flex Tree à un arbre stocké dans une base de données?
- 29. Quelle est la meilleure bibliothèque de vérification orthographique pour C#?
- 30. Quelle est la meilleure façon d'afficher un indicateur « de chargement » sur un contrôle WPF
Ça ne marche pas pour moi. 'Après l'utilisation d'une SetterBaseCollection (scellée), elle ne peut pas être modifiée'. .NET 3.5, VS 2008. Je place le 'Style' dans le' Window.Resources'. –
@Morawski: Découvrez [cette FAQ] (http://stackoverflow.com/q/1684997/22211). –