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.
Ja, gleiche wie oben! Herausgefunden noch?
InformationsquelleAutor Ben Brandt | 2008-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Getter von Ihren Eigenschaften Farbe, die Sie benötigen, zu konvertieren, zu Bürsten
Könnte es nicht einen Unterschied machen, da es wahrscheinlich nur mit auto-konvertiert, aber versuchen Sie es.
Hmm, ich weiß nicht, dann. Der rest des Codes sieht gut zu mir, aber ich bin noch ziemlich neu in dieses Zeug.
InformationsquelleAutor Bryan Anderson
Siehe die Antwort von Benutzerdefinierte UserControl-Eigenschaft, die durch das Kind-element. Das gleiche Konzept angewendet werden kann für Ihre ToggleButton. Erstellen UserControl ohne Inhalt einfach nur ein UserControl.Vorlage überschreiben und verwenden TemplateBinding setzen Ihre Requisiten
InformationsquelleAutor bendewey