美好的一天,
这里的第一个问题,只是学习WPF,所以请温柔......
我正在尝试组合一个TreeView,其项目可以触发命令。我确信有很多方法可以实现这一点,但我的方法是使用ControlTemplate为TreeViewItem创建一个Style,其中包含一个RadioButton用于其Command功能。
. . .
<ToggleButton x:Name="Expander"
Style="{StaticResource ExpandCollapseToggleStyle}" Grid.Column="0" Grid.Row="0"
IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press"/>
<RadioButton Style="{StaticResource TreeElementStyle}"
Grid.Row="0" Grid.Column="1" Command="{TemplateBinding ???}">
<ContentPresenter x:Name="PART_Header" ContentSource="Header"/>
</RadioButton>
<ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"/>
</Grid>
. . .
无论如何,我的树在视觉上看起来很好但是无法理解如何将我的Command绑定到合并的RadioButton,并且迷失在模板混乱的泥潭中。
. . .
<TreeView>
<TreeViewItem Header="Enterprise">
<TreeViewItem Header="General Settings"
Command="{Binding Path=GeneralSettingsCommand}"/>
. . .
我会提供更多的代码,但我认为在这一点上,答案将更加符合“Dude,你的方式偏离轨道。首先阅读blah”或“一个按钮完全没必要”,或者“你应该使用ItemTemplate”或“......”或“只是放弃”;)
答案 0 :(得分:0)
谢谢Meleak;很好的信息。
但是,我找到了一个非常简单的解决方案 - 无论如何都是出于我的目的。
整个技巧是将Button作为TreeViewItem.Header提供,而不是将其合并到TreeViewItem的ControlTemplate中。
如果我将Button作为TreeViewItem.Header提供,我可以轻松地在其上设置命令并对其进行适当的样式设置。
以下是示例:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style TargetType="{x:Type RadioButton}">
<Setter Property="GroupName" Value="TreeGroup"/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RadioButton}">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!-- beginnings of a folder icon -->
<Border Background="Black" VerticalAlignment="Center" Width="12" Height="10" CornerRadius="2">
<Border Background="DarkGoldenrod" Margin="1"/>
</Border>
<Border Grid.Column="1" Margin="4,0,0,0" Padding="1,2,4,2" Name="Selection" Background="Transparent">
<ContentPresenter />
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Selection" Property="Background" Value="DarkBlue"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Grid>
<TreeView Width="220" Focusable="False">
<TreeViewItem IsExpanded="True">
<TreeViewItem.Header>
<RadioButton Content="Enterprise"/>
</TreeViewItem.Header>
<TreeViewItem>
<TreeViewItem.Header>
<RadioButton Content="Settings" Command="{Binding SettingsCommand}"/>
</TreeViewItem.Header>
</TreeViewItem>
<TreeViewItem>
<TreeViewItem.Header>
<RadioButton Content="Statistics" Command="{Binding StatisticsCommand}"/>
</TreeViewItem.Header>
</TreeViewItem>
</TreeViewItem>
</TreeView>
</Grid>
</Page>