在ListView' SelectionChanged'之后关注TextBox事件

时间:2013-03-06 18:34:00

标签: c# wpf listview focus

我希望在从TextBox控件中选择一个项目之后将焦点设置为ListView,但我似乎无法从我的'SelectionChanged'事件方法{{{{{{ 1}}。

出于某种原因,FocusOnTextBox()在选择后始终具有焦点。

我创建了一个Visual Studio应用程序来演示此问题:

http://maq.co/focusapp.zip

如何从我的'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.&#x0a;&#x0a;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>

1 个答案:

答案 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