如何將複選框插入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