Verwenden Checkbox als ToggleButton in Expander
-
29-09-2019 - |
Frage
Im ganz neu folgende Problem wpf und haben.
Ich brauche eine Liste zu erstellen (i eine Auswahlbox bin mit) von Elementen, die (Expander) erweitert werden können. Das Problem ist, dass sie erweitert werden kann, nur dann, wenn sie ‚ausgewählt‘ worden sind. Jede ListBoxItem sollte eine Checkbox hat und etwas Text.
So sehr einfaches Beispiel zu veranschaulichen, was ich meine:
<listbox>
<item>(checkbox) John Doe</item>
<item>(checkbox) Mike Murray</item>
</listbox>
Wenn eineine (so mehrere erlaubt ist) das Kontrollkästchen im Listenfeld wird geprüft, dann das Element erweitert mehr Daten.
Auch hier ein Beispiel:
<listbox>
<item>
(checkbox-checked) John Doe
Some extra data shown in expanded area
</item>
<item>
(checkbox-unchecked) Mike Murray</item>
</listbox>
Ich kann nicht einen Expander erhält ein Kontrollkästchen zu verwenden, wie 'ToggleButton'.
Kann jemand mir helfen, aus? Einige Beispiel-Code wäre sehr willkommen ...
Lösung
Das sollte es tun:
<ListBox>
<ListBox.Resources>
<Style TargetType="Expander">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Expander">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<CheckBox
IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
Content="{TemplateBinding Header}"
/>
<ContentControl
x:Name="body"
Grid.Row="1" Content="{TemplateBinding Content}"
/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="False">
<Setter TargetName="body" Property="Visibility" Value="Collapsed" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.Resources>
<Expander Header="One">
Content one
</Expander>
<Expander Header="Two">
Content two
</Expander>
</ListBox>
Ich habe eine Style
hier definiert, die die Template
aller Expander
Kontrollen, denen ändert sich die Style
angewendet wird. (Und da ich gesetzt habe die Style
im ListBox.Resources
es automatisch zu einer Expander
Kontrollen in der Liste anwenden werden.)
Der Trick, um die CheckBox
zur Arbeit zu bekommen, ist, dass wenn man es (oder in der Tat jeder ToggleButton
basierte Steuerung) in eine Expander
Vorlage, müssen Sie ein Datum verwenden, die Bindung konfigurierte mit seinem RelativeSource
Satz zum TemplatedParent
. Dies ermöglicht die bidirektionale Bindung -. Es bedeutet, dass nicht nur die CheckBox
den aktuellen Zustand des Expanders reflektiert, es ist auch in der Lage Veränderung der aktuelle Zustand
Andere Tipps
Alles, was Sie brauchen, ein Kontrollkästchen in der Kopfzeile hinzuzufügen, ist dieser Code:
<telerik:RadExpander.Header>
<StackPanel Orientation="Horizontal">
<CheckBox VerticalAlignment="Center"/>
<TextBlock Margin="5,0,0,0">Legend</TextBlock>
</StackPanel>
</telerik:RadExpander.Header>
Ich bin mit Rad Control können das gleiche mit dem Standard erfolgen Expander