我对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'。
有人可以帮帮我吗?一些示例代码非常受欢迎......
答案 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,使用标准扩展器
也可以