在我的应用程序中,我有一个允许拖放的TreeView.我的所有功能都运行正常,但是在拖动时突出显示TreeViewItem很困难.这是我的treeview项目的样式.拖动时IsMouseOver触发器不起作用,因为拖动似乎阻止了其他鼠标事件.任何人都可以帮我在拖动时触发我的treeview项目上相同的边框更改?
<Style x:Key="TreeViewItemStyle" TargetType="{x:Type TreeViewItem}">
<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>
<ToggleButton
x:Name="PART_Expander"
Style="{StaticResource ExpandCollapseToggleStyle}"
IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press"
/>
<Border
x:Name="OuterBorder"
Grid.Column="1"
SnapsToDevicePixels="True"
BorderThickness="1"
CornerRadius="3"
BorderBrush="Transparent"
Background="Transparent"
>
<Border
x:Name="InnerBorder"
SnapsToDevicePixels="True"
BorderThickness="1"
CornerRadius="2"
BorderBrush="Transparent"
Background="Transparent"
>
<ContentPresenter
x:Name="PART_Content"
ContentSource="Header"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
/>
</Border>
</Border>
<ItemsPresenter
x:Name="PART_ItemsHost"
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="2"
/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" SourceName="OuterBorder" Value="True">
<Setter TargetName="OuterBorder" Property="BorderBrush" Value="Blue" />
<Setter TargetName="OuterBorder" …Run Code Online (Sandbox Code Playgroud) 我在我现在正在处理的应用程序上注意到了这一点,因此我创建了一个简单的测试应用程序来演示。下面是我的一个窗口和树视图项的事件处理程序。如果您展开“一个”或“两个”父节点,并单击其中一个子节点,则在对文本框调用 Focus() 方法后,选定的子节点不会显示为已选择。相反,选择会弹出到父节点。有没有人知道如何克服这个问题,并将选择保留在选定的子节点上?谢谢。
<Window
x:Class="DockingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
WindowState="Maximized"
>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TreeView Margin="6">
<TreeViewItem Header="One">
<TreeViewItem Header="One" Selected="TreeViewItem_Selected" />
<TreeViewItem Header="Two" Selected="TreeViewItem_Selected" />
<TreeViewItem Header="Three" Selected="TreeViewItem_Selected" />
</TreeViewItem>
<TreeViewItem Header="Two">
<TreeViewItem Header="One" Selected="TreeViewItem_Selected" />
<TreeViewItem Header="Two" Selected="TreeViewItem_Selected" />
<TreeViewItem Header="Three" Selected="TreeViewItem_Selected" />
</TreeViewItem>
</TreeView>
<TextBox Grid.Column="1" x:Name="textbox" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
{
textbox.Focus();
}
Run Code Online (Sandbox Code Playgroud)
使用上面的窗口和“Selected”事件句柄