WPF-Vorlage-Bindung in der ToggleButton-UserControl

Entwickle ich ein basic-dip-Schalter ein Benutzer-Steuerelement, wie ein personal learning übung. Ursprünglich hatte ich es eingerichtet, in denen Sie erklären können einige benutzerdefinierte Eigenschaften Farbe, auf die der Benutzer Steuern, und Sie verwendet werden, auf Elemente innerhalb des Steuerelements.

Allerdings habe ich kürzlich entdeckt, ToggleButtons, wieder aufgebaut und meine Kontrolle ist, Sie zu nutzen. Seitdem ist meine benutzerdefinierte Eigenschaften Farbe (SwitchColor und SwitchBkgndColor) nicht mehr richtig arbeiten. Sie sind immer gerendert mit dem Standard-Farben, nicht die Farben, die ich festgelegt, wenn ich in meinem Fenster. Hier einige 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>

...und der code hinter:

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

Den Standard-Grau und Hellgrau in der VS2008-designer und die kompilierte app, aber wenn ich so etwas in meinem Fenster:

<app:DipSwitchToggleBtn x:Name="DipSwitchTest" SwitchColor="#0000FF" SwitchBkgndColor="#000000" />

Den Farben, die ich angegeben für das Beispiel nicht verwendet werden. Alles ohne Fehler kompiliert, aber meine Steuern, noch immer angezeigt wird, mit den Standard-Farben.

Ich glaube, es gibt einige neue Hierarchie zu spielen, da ich verschachtelte meine Artikel in der ToggleButton.

Jede Hilfe würde geschätzt werden. Danke.

Waren Sie in der Lage, dieses Problem zu lösen? Habe ich das exakt gleiche Problem jetzt und können nicht sagen, was ich falsch mache!
Ja, gleiche wie oben! Herausgefunden noch?

InformationsquelleAutor Ben Brandt | 2008-12-12

Schreibe einen Kommentar