2

我对 wpf 很陌生,必须解决以下问题。

我需要创建一个可以扩展(扩展器)的项目列表(我正在使用列表框)。问题是,只有当它们被“选中”时,它们才能被扩展。每个 listboxitem 都应该有一个复选框和一些文本。

所以非常基本的例子来说明我的意思:

<listbox>
<item>(checkbox) John Doe</item>
<item>(checkbox) Mike Murray</item>
</listbox>

如果选中列表框中的任何(允许多个)复选框,则该项目将展开以显示更多数据。

再举个例子:

<listbox>
<item>
   (checkbox-checked) John Doe
   Some extra data shown in expanded area
</item>
<item>
   (checkbox-unchecked) Mike Murray</item>
</listbox>

我无法让扩展器将复选框用作“切换按钮”。

谁能帮帮我?一些示例代码将非常受欢迎......

4

2 回答 2

2

这应该可以解决问题:

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

我在Style这里定义了一个,它改变了Template应用 的任何Expander控件的Style。(并且由于我已将其放入StyleListBox.Resources它会自动应用于Expander列表中的控件。)

让. CheckBox_ ToggleButton_ Expander_ RelativeSource_ TemplatedParent这启用了双向绑定 - 这意味着不仅CheckBox反映了扩展器的当前状态,还能够更改当前状态。

于 2010-12-02T11:04:38.547 回答
-1

您只需要在标题中添加一个复选框就是以下代码:

            <telerik:RadExpander.Header>
                <StackPanel Orientation="Horizontal">
                    <CheckBox VerticalAlignment="Center"/>
                    <TextBlock Margin="5,0,0,0">Legend</TextBlock>
                </StackPanel>
            </telerik:RadExpander.Header>

我正在使用 Rad Control,同样可以使用标准扩展器完成

于 2012-12-12T07:20:20.590 回答