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?
InformationsquelleAutor Ben Brandt | 2008-12-12