Wpf 项目模板当前项目
我有一个简单的 ListBox.ItemTemplate
,其中包含绑定到 CSLA 可绑定列表
的 Label
和 TextBox
。当我选择 TextBox
时,CurrentItem
不会改变,只有当我选择 Label
时它才会改变。我有 IsSynchronizedWithCurrentItem='True'
。
<ListBox x:Name="ItemsDataGrid"
ItemsSource="{Binding Source={StaticResource AuditItems},Path=Items}"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition Width="100"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Grid.Column="0"
Content="{Binding Path=TypeRef}" />
<TextBox x:Name="TextBoxQty"
Grid.Column="1"
Text="{Binding Path=TaliQty}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
I have a simple ListBox.ItemTemplate
containing a Label
and a TextBox
bound to a CSLA Bindable List
. When I select the TextBox
the CurrentItem
does not change, it only changes if I select the Label
. I have IsSynchronizedWithCurrentItem='True'
.
<ListBox x:Name="ItemsDataGrid"
ItemsSource="{Binding Source={StaticResource AuditItems},Path=Items}"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition Width="100"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Grid.Column="0"
Content="{Binding Path=TypeRef}" />
<TextBox x:Name="TextBoxQty"
Grid.Column="1"
Text="{Binding Path=TaliQty}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试将其添加到您的列表框中。每当任何包含的元素(如 TextBox)获得键盘焦点时,它都会选择该项目。类似的方法也可以仅在触发器中使用一个简单的设置器,但这往往会干扰 ICollectionView 上的 CurrentItem 设置:
Try adding this to your ListBox. It selects the item any time any contained element (like TextBox) gets keyboard focus. A similar method could also be used with just a simple setter in the Trigger but that tends to interfere with the CurrentItem setting on the ICollectionView:
发生这种情况是因为 TextBox 正在处理 MouseDown 事件。由于它设置为冒泡,因此它不会到达包含 ListBoxItem。解决此问题的最简单方法是仅处理 PreviewMouseDown 中 ListBoxItems 的选择,这将在实际 MouseDown 事件冒泡之前发生并向下传输。
在 xaml 文件的隐藏代码中:
This is happening because the TextBox is handling the MouseDown event. As it is set to bubble up it will not reach the containing ListBoxItem. The simplest way to fix this would be to just handle the selection of the ListBoxItems in the PreviewMouseDown, which will occur and tunnel down before the actual MouseDown event bubbles up.
And in the Code behind for the xaml file: