[英]I have a button in TreeviewItem. When i Click on Button TreeviewItem will not be get selected
I have a button in TreeviewItem.我在 TreeviewItem 中有一个按钮。 When i Click on Button TreeviewItem will not be get selected.(styles will not changed)当我点击按钮 TreeviewItem 不会被选中。(样式不会改变)
<TreeView Grid.Row="1" Grid.Column="1" Style="{StaticResource TreeViewStyle}">
<TreeViewItem x:Name="Root" Header="Item 1111111111" >
<TreeViewItem Header="Item 1.1">
<TreeViewItem Header="Item 1.1">
<Border HorizontalAlignment="Stretch" BorderThickness="1" BorderBrush="Red">
<ToggleButton Content="Button">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Cursor" Value="{x:Static Cursors.Hand}" />
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<!--<Setter Ta TargetName="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=x:Name}" Property="Foreground" Value="Red"/>-->
<Setter Property="Foreground" Value="{StaticResource ThemeColorBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ToggleButton.Style>
</ToggleButton>
</Border>
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Item 2"/>
</TreeView>
My expected Output is when user click on TreeviewItem(having Button) it should make of treeviewItem as我预期的输出是当用户单击 TreeviewItem(具有 Button)时,它应该将 treeviewItem 作为
Isselected=True被选中=真
How can I achive this我怎样才能做到这一点
A possible way is to add a style trigger to the TreeViewItem and, whenever the IsKeyboardFocusWithin=True, you set the IsSelected to true.一种可能的方法是向 TreeViewItem 添加样式触发器,并且每当 IsKeyboardFocusWithin=True 时,将 IsSelected 设置为 true。 To achieve this you also need to make your ToggleButton focusable.为了实现这一点,您还需要使您的 ToggleButton 可聚焦。 Like this:像这样:
<TreeView Grid.Row="1" Grid.Column="1" Style="{StaticResource TreeViewStyle}">
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.Resources>
<TreeViewItem x:Name="Root" Header="Item 1111111111" >
<TreeViewItem Header="Item 1.1">
<TreeViewItem Header="Item 1.1">
<Border HorizontalAlignment="Stretch" BorderThickness="1" BorderBrush="Red">
<ToggleButton Content="Button">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Focusable" Value="True"/>
<Setter Property="Cursor" Value="{x:Static Cursors.Hand}" />
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<!--<Setter Ta TargetName="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=x:Name}" Property="Foreground" Value="Red"/>-->
<Setter Property="Foreground" Value="{StaticResource ThemeColorBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ToggleButton.Style>
</ToggleButton>
</Border>
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Item 2"/>
</TreeView>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.