WPF Modèle de Liaison en ToggleButton UserControl
Je suis l'élaboration d'une base dip-switch de contrôle de l'utilisateur comme un exercice d'apprentissage. A l'origine, j'avais mis de là où vous l'avez peut déclarer la coutume, les propriétés de la couleur sur le contrôle de l'utilisateur, et ils seront utilisés sur des éléments à l'intérieur du contrôle.
Cependant, je recenly découvert contrôles togglebutton, et reconstruit à mon contrôle de profiter d'eux. Depuis, ma couleur personnalisée propriétés (SwitchColor et SwitchBkgndColor) ne fonctionnent plus correctement. Ils sont toujours rendus avec les couleurs par défaut, pas les couleurs que j'ai précisé quand je les place dans ma Fenêtre. Voici un code:
<UserControl x:Class="DipSwitchToggleBtn"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:SwitchesApp"
Width="20" Height="40">
<ToggleButton Name="ToggleBtn" IsThreeState="False">
<ToggleButton.Template>
<ControlTemplate>
<Canvas Name="SwitchBkgnd"
Background="{TemplateBinding app:DipSwitchToggleBtn.SwitchBkgndColor}"
>
<Rectangle Name="SwitchBlock"
Fill="{TemplateBinding app:DipSwitchToggleBtn.SwitchColor}"
Width="16" Height="16"
Canvas.Top="22"
Canvas.Left="2"
/>
</Canvas>
<ControlTemplate.Triggers>
<Trigger Property="ToggleButton.IsChecked" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SwitchBlock"
Duration="00:00:00.05"
Storyboard.TargetProperty="(Canvas.Top)" To="2" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SwitchBlock"
Duration="00:00:00.05"
Storyboard.TargetProperty="(Canvas.Top)" To="22" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
</UserControl>
...et le code-behind:
Partial Public Class DipSwitchToggleBtn
Public Property State() As Boolean
Get
Return Me.ToggleBtn.IsChecked
End Get
Set(ByVal value As Boolean)
Me.ToggleBtn.IsChecked = value
End Set
End Property
Public Sub Toggle()
Me.State = Not Me.State
End Sub
#Region " Visual Properties "
Public Shared ReadOnly SwitchColorProperty As DependencyProperty = _
DependencyProperty.Register("SwitchColor", _
GetType(Brush), GetType(DipSwitchToggleBtn), _
New FrameworkPropertyMetadata(Brushes.LightGray))
Public Property SwitchColor() As Brush
Get
Return GetValue(SwitchColorProperty)
End Get
Set(ByVal value As Brush)
SetValue(SwitchColorProperty, value)
End Set
End Property
Public Shared ReadOnly SwitchBkgndColorProperty As DependencyProperty = _
DependencyProperty.Register("SwitchBkgndColor", _
GetType(Brush), GetType(DipSwitchToggleBtn), _
New FrameworkPropertyMetadata(Brushes.Gray))
Public Property SwitchBkgndColor() As Brush
Get
Return GetValue(SwitchBkgndColorProperty)
End Get
Set(ByVal value As Brush)
SetValue(SwitchBkgndColorProperty, value)
End Set
End Property
#End Region
End Class
La valeur par défaut de Gris et LightGray apparaître dans la VS2008 designer et de l'application compilée, mais quand je fais quelque chose comme ça dans ma fenêtre:
<app:DipSwitchToggleBtn x:Name="DipSwitchTest" SwitchColor="#0000FF" SwitchBkgndColor="#000000" />
Les couleurs que j'ai précisé pour cette instance ne s'habituent pas. Tout se compile sans erreur, mais ma commande est toujours affiché avec les couleurs par défaut.
Je crois qu'il y est une nouvelle hiérarchie à jouer depuis que j'ai imbriqué mes articles dans le ToggleButton.
Toute aide serait appréciée. Merci.
- Avez-vous été en mesure d'obtenir ce problème résolu? Je suis en cours d'exécution dans le exactement la même question de droit et ne peut pas dire ce que je fais de mal!
- Ouais même que ci-dessus! Pensé à elle encore?
Vous devez vous connecter pour publier un commentaire.
Dans les getters de votre couleur de propriétés que vous avez besoin de les convertir à brosses
Il ne pourrait pas faire une différence, car il est probablement juste de l'auto-convertit, mais lui donner un essai.
Voir la réponse de Personnalisé Propriété UserControl utilisé par l'élément enfant. Le même concept peut être appliqué pour votre ToggleButton. Créer un UserControl avec pas de contenu, juste un UserControl.Modèle de remplacement et l'utilisation objet templatebinding pour définir vos accessoires