我希望在从TextBox
控件中选择一个项目之后将焦点设置为ListView
,但我似乎无法从我的'SelectionChanged'事件方法{{{{{{ 1}}。
出于某种原因,FocusOnTextBox()
在选择后始终具有焦点。
我创建了一个Visual Studio应用程序来演示此问题:
如何从我的'SelectionChanged'事件方法中获得焦点以返回ListView
?
MainWindow.xaml:
TextBox
MainWindow.xaml.cs:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListView Name="list_view1" Grid.Column="0" SelectionChanged="FocusOnTextBox">
<ListViewItem Content="1" />
<ListViewItem Content="2" />
<ListViewItem Content="3" />
</ListView>
<TextBox Name="text_box1" Grid.Column="1" Text="When a selection is chosen from the left hand side ListView, I want THIS word to be selected and for the focus to change to this text box - this will show the selection to the user.

However, right now it doesn't seem to work, the focus remains on the ListView regardless of it being set to Focus() in the FocusOnTextBox() method, which is fired on the 'SelectionChanged' event." TextWrapping="Wrap" />
</Grid>
</Window>
答案 0 :(得分:2)
我相信这是因为ListView
没有完成更改选择,所以你从SelectionChanged
事件处理程序中切换焦点不会因为你改变了焦点后的问题,{ {1}}将其更改回来以完成其选择更改流程。
如果你在ListView
函数中放置一个断点并查看调用堆栈,你会发现你已经非常深入到堆栈中了,FocusOnTextBox
会有很多执行ListView
函数后执行操作。我想其中的一件事就是将焦点设置为FocusOnTextBox
中的所选项目。
如果您更改它以便在ListView
完成更改当前选择后转移焦点,它应该可以正常工作。例如,更改它以便在ListView
中切换焦点似乎有效:
MouseLeftButtonUp
然后,您需要将<ListView Name="list_view1" Grid.Column="0" MouseLeftButtonUp="FocusOnTextBox">
<ListViewItem Content="1" />
<ListViewItem Content="2" />
<ListViewItem Content="3" />
</ListView>
事件处理程序定义更改为使用FocusOnTextBox
而不是MouseEventArgs
。