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 ...

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top