WPF ListBoxItem定制样式中的TextBox获得输入焦点,ListBoxItem如何被选中?

-小仙- 2012-08-23 09:26:27
【ItemView.xaml】:
一个UserControl 完成ListBoxItem外观的定制,因为外观内容较多,就没有用DataTemplate定义外观。
该UserControl 内部有一个TextBox

【全局定义】
<DataTemplate DataType="{x:Type vm:TaskViewModel}">
<vw:ItemView/>
</DataTemplate>

【添加ListBox】
<ListBox ItemsSource="{Binding TaskList}" HorizontalContentAlignment="Stretch">

TaskViewModel为TaskList集合的项!

如何在UserControl中的TextBox获得输入焦点时,把ListBox 对应的ListBoxItem也置为选中呢?
...全文
424 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
-小仙- 2012-08-23
  • 打赏
  • 举报
回复
不知道有没有什么更好的办法完成这种交互?
-小仙- 2012-08-23
  • 打赏
  • 举报
回复
方法来自:
http://hi.baidu.com/willbelate/item/5bacc470e36a8c10d1dcb35b

当然要在内部TextBox添加tag属性:
<TextBox x:Name="txtBox" Grid.Column="2" Text="{Binding Path=Content, UpdateSourceTrigger=PropertyChanged}"
Focusable="True"
VerticalAlignment="Center"
Margin="10,0,5,0"
Background="Transparent"
BorderThickness="0"
Tag="{Binding}"
/>
-小仙- 2012-08-23
  • 打赏
  • 举报
回复
可以在外部给ListBox 添加侦听TextBox的GotFocusEvent事件:
listBox.AddHandler(TextBox.GotFocusEvent, new RoutedEventHandler(this.TextBoxGotFocus));


void TextBoxGotFocus(object sender, RoutedEventArgs e)
{
FrameworkElement element = e.OriginalSource as FrameworkElement;
if (element.GetType().Equals(typeof(TextBox)))
{
listBox.SelectedItem = ((TextBox)e.OriginalSource).Tag;
}
e.Handled = true;
}

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧