在扩展器中使用复选框作为togglebutton

时间:2010-12-01 19:34:11

标签: wpf checkbox expander togglebutton

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

我无法使用扩展程序将复选框用作'togglebutton'。

有人可以帮帮我吗?一些示例代码非常受欢迎......

2 个答案:

答案 0 :(得分: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。 (因为我已将Style放在ListBox.Resources中,它会自动应用于列表中的Expander控件。)

CheckBox工作的诀窍是当你将它(或者实际上任何基于ToggleButton的控件)放入Expander模板时,你需要使用配置的数据绑定将RelativeSource设置为TemplatedParent。这样可以实现双向绑定 - 这意味着CheckBox不仅可以反映扩展器的当前状态,还可以更改当前状态。

答案 1 :(得分:-1)

您需要在标题中添加一个复选框,此代码为:

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

我正在使用Rad Control,使用标准扩展器

也可以