我正在WPF ListBoxes之间执行拖放操作,我希望能够在它被删除的位置插入集合而不是列表的末尾.
有没有人知道类似于WinForms ListBox IndexFromPoint函数的解决方案?
在我的窗口中,我有一个TreeView和TextBox.假设TextBox用于编写自定义脚本,TreeView是一种选择要插入的函数的方法; 想想Crystal Report脚本编辑器.
我的目标是让用户单击TreeView的一个子项,并将该子项插入TextBox.子项是函数签名,位于父节点下.然后,用户可以导航到TextBox,选择一个功能参数并将其替换为另一个功能签名.为此,我处理TreeView的SelectedItemChanged事件,设置TextBox的SelectedText,然后尝试在文本更改后突出显示该文本.
正确地交换TextBox的SelectedText.但是,文本未突出显示,滚动条未滚动到所选文本.
这是我编写的测试项目中的XAML,用于重现行为:
<Window x:Class="SelectedTextWeirdness.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:SelectedTextWeirdness="clr-namespace:SelectedTextWeirdness" Title="MainWindow" Width="600" Height="600"
x:Name="Me">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TreeView Grid.Row="0" x:Name="treeView" ItemsSource="{Binding ElementName=Me, Path=TreeViewItems, Mode=TwoWay}"
SelectedItemChanged="treeView_SelectedItemChanged" Margin="10">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type SelectedTextWeirdness:Parent}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type SelectedTextWeirdness:Child}">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
<TextBox Grid.Row="1" x:Name="scriptTextBox" Margin="10" Height="200" Width="Auto" FontFamily="Consolas, Courier New"
HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto"
MaxLines="9999" AcceptsReturn="True" AcceptsTab="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Text="{Binding Path=Script, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
这是代码隐藏:
using …Run Code Online (Sandbox Code Playgroud)