如何将复选框插入treeviewitem(扩展器)的左边,所以它是同一个项目。TreeView左边的WPF复选框
回答
您可以修改TreeViewItem的标题以在左侧添加复选框。下面是一个快速入门的例子,这个xaml只是在左侧添加了一个复选框,在右侧添加了一个TextBlock。
<TreeView>
<TreeViewItem>
<TreeViewItem.Header>
<WrapPanel>
<CheckBox />
<TextBlock
Margin='5,0'
Text='Item' />
</WrapPanel>
</TreeViewItem.Header>
<TreeViewItem>
<TreeViewItem.Header>
<WrapPanel>
<CheckBox />
<TextBlock
Margin='5,0'
Text='SubItem' />
</WrapPanel>
</TreeViewItem.Header>
</TreeViewItem>
</TreeViewItem>
</TreeView>
根据你的情况下,您可能希望创建一个全新的模板来覆盖默认的外观为所有TreeViewItems,如果你这样做,然后签出MSDN树型视图控件模板例如:
Sergo,这是一个使用控制模板的版本,我们在项目的第0列中放置了复选框。它们应该与TreeViewItem向左对齐。 '魔术'部分在CheckboxTreeItem样式中,我们添加一个WrapPanel并将其放置在Grid.Column ='0'中。
<Window
x:Class="TreeViewHeaderTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Height="300"
Width="300">
<Window.Resources>
<SolidColorBrush
x:Key="GlyphBrush"
Color="#444" />
<Style
x:Key="ExpandCollapseToggleStyle"
TargetType="ToggleButton">
<Setter
Property="Focusable"
Value="False" />
<Setter
Property="Template">
<Setter.Value>
<ControlTemplate
TargetType="ToggleButton">
<WrapPanel
Background="Transparent">
<Path
x:Name="ExpandPath"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="1,1,1,1"
Fill="{StaticResource GlyphBrush}"
Data="M 4 0 L 8 4 L 4 8 Z" />
</WrapPanel>
<ControlTemplate.Triggers>
<Trigger
Property="IsChecked"
Value="True">
<Setter
Property="Data"
TargetName="ExpandPath"
Value="M 0 4 L 8 4 L 4 8 Z" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style
x:Key="TreeViewItemFocusVisual">
<Setter
Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border>
<Rectangle
Margin="0,0,0,0"
StrokeThickness="5"
Stroke="Black"
StrokeDashArray="1 2"
Opacity="0" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style
x:Key="CheckboxTreeItem"
TargetType="{x:Type TreeViewItem}">
<Setter
Property="IsExpanded"
Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter
Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter
Property="Background"
Value="Transparent" />
<Setter
Property="HorizontalContentAlignment"
Value="{Binding Path=HorizontalContentAlignment,
RelativeSource={RelativeSource
AncestorType={x:Type ItemsControl}}}" />
<Setter
Property="VerticalContentAlignment"
Value="{Binding Path=VerticalContentAlignment,
RelativeSource={RelativeSource
AncestorType={x:Type ItemsControl}}}" />
<Setter
Property="Padding"
Value="1,0,0,0" />
<Setter
Property="Foreground"
Value="{StaticResource {x:Static
SystemColors.ControlTextBrushKey}}" />
<Setter
Property="FocusVisualStyle"
Value="{StaticResource TreeViewItemFocusVisual}" />
<Setter
Property="Template">
<Setter.Value>
<ControlTemplate
TargetType="{x:Type TreeViewItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
MinWidth="19"
Width="Auto" />
<ColumnDefinition
Width="Auto" />
<ColumnDefinition
Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition
Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<WrapPanel
Grid.Column='0'>
<CheckBox />
<ToggleButton
x:Name="Expander"
Style="{StaticResource
ExpandCollapseToggleStyle}"
IsChecked="{Binding Path=IsExpanded,
RelativeSource={RelativeSource
TemplatedParent}}"
ClickMode="Press" />
</WrapPanel>
<Border
Name="Bd"
Grid.Column="1"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding
BorderThickness}"
Padding="{TemplateBinding Padding}">
<ContentPresenter
x:Name="PART_Header"
ContentSource="Header"
HorizontalAlignment="{TemplateBinding
HorizontalContentAlignment}" />
</Border>
<ItemsPresenter
x:Name="ItemsHost"
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="2" />
</Grid>
<ControlTemplate.Triggers>
<Trigger
Property="IsExpanded"
Value="false">
<Setter
TargetName="ItemsHost"
Property="Visibility"
Value="Collapsed" />
</Trigger>
<Trigger
Property="HasItems"
Value="false">
<Setter
TargetName="Expander"
Property="Visibility"
Value="Hidden" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
Property="HasHeader"
Value="false" />
<Condition
Property="Width"
Value="Auto" />
</MultiTrigger.Conditions>
<Setter
TargetName="PART_Header"
Property="MinWidth"
Value="75" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
Property="HasHeader"
Value="false" />
<Condition
Property="Height"
Value="Auto" />
</MultiTrigger.Conditions>
<Setter
TargetName="PART_Header"
Property="MinHeight"
Value="19" />
</MultiTrigger>
<Trigger
Property="IsSelected"
Value="true">
<Setter
TargetName="Bd"
Property="Background"
Value="AliceBlue" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
Property="IsSelected"
Value="true" />
<Condition
Property="IsSelectionActive"
Value="false" />
</MultiTrigger.Conditions>
<Setter
TargetName="Bd"
Property="Background"
Value="{StaticResource {x:Static
SystemColors.ControlBrushKey}}" />
<Setter
Property="Foreground"
Value="{StaticResource {x:Static
SystemColors.ControlTextBrushKey}}" />
</MultiTrigger>
<Trigger
Property="IsEnabled"
Value="false">
<Setter
Property="Foreground"
Value="{StaticResource {x:Static
SystemColors.GrayTextBrushKey}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<TreeView>
<TreeViewItem
Style='{StaticResource CheckboxTreeItem}'
Header='Item'
IsExpanded='True'>
<TreeViewItem
Style='{StaticResource CheckboxTreeItem}'
Header='SubItem 1' />
<TreeViewItem
Style='{StaticResource CheckboxTreeItem}'
Header='SubItem 2'>
<TreeViewItem
Style='{StaticResource CheckboxTreeItem}'
Header='SubItem a' />
<TreeViewItem
Style='{StaticResource CheckboxTreeItem}'
Header='SubItem b' />
</TreeViewItem>
</TreeViewItem>
</TreeView>
</Window>
非常感谢,例如。你明白我的意思。现在我们有根元素Header ='Item' 并且在复选框附近 - 这很好,但是下一个项目Header ='SubItem 1'有偏移量 - 也没关系。但是Header ='SubItem 1'的复选框必须保持在复选框的根目录下,而不是偏移量。 – 2010-03-23 14:50:57
你可以给我修改版吗? – 2010-03-23 15:30:17
如果你想TreeViewItems缩进,但所有的复选框都会左移(不管它们的缩进),那么你可能需要添加一些方法来知道你的嵌套层次。我不确定如何在Xaml中完成这项工作。 – 2010-03-23 15:31:34
- 1. WPF TreeView和复选框
- 2. 带有复选框的WPF TreeView
- 3. WPF Treeview - 获取复选框的状态
- 4. treeview复选框
- 5. WPF复选框左侧的文本?
- 6. JQuery复选框Treeview
- 7. asp.net treeview复选框选择
- 8. kendoui treeview中的复选框
- 9. Android Studio将标准复选框背景置于复选框的左边框?
- 10. 选择链接,自动选中它的左边的复选框
- 11. WPF TreeView复选框绑定 - 如何使用复选框填充ViewModel
- 12. 扩展.NET TreeView复选框
- 13. 禁用ASP.net treeview复选框
- 14. treeview复选框菜单
- 15. Pyqt treeview与复选框
- 16. TreeView关闭复选框
- 17. treeView与选定节点的复选框
- 18. 如何用wpf中的复选框开发treeview?
- 19. 已通过HTML标签浮动框左边的复选框
- 20. 复制Treeview选择项目WPF
- 21. 从现有TreeView的选中复选框创建TreeView
- 22. ASP.NET复选框文本左对齐或左对齐复选框
- 23. WPF填充treeview选项到文本框
- 24. 将复选框添加到VB.NET WPF 3.5 TreeView
- 25. 修复CSS边框右和左边框的问题
- 26. JFoenix在JavaFX中的复选框左边的标签
- 27. WPF复选框排
- 28. 复选框WPF MVVM
- 29. WPF复选框multiBinding
- 30. WPF - 复选框tamplate
感谢您的回复。 我的意思是这样的情况: ----------------------------- | 的TreeView 列1列2 的CheckBox树型视图 的CheckBox树型视图 的CheckBox树型视图 所有复选框必须在右侧的左对齐,树视图。 Withou使用LisBox或TreeListView – 2010-03-23 11:58:30
当我使用这个http://msdn.microsoft.com/en-us/library/ms788727.aspx 我有情况左边的复选框,但没有对齐列。 – 2010-03-23 13:36:03
无论TreeViewItem的嵌套深度如何,您希望所有复选框都沿着左边的对齐方式排列在彼此之下。我几乎可以肯定这是使用ControlTemplate可以实现的,但是我已经仔细研究了一段时间。我会看看我能否找到它并发布一些代码。 – 2010-03-23 13:57:34