Wpf项目模板CurrentItem
我有一个简单的Wpf项目模板CurrentItem,wpf,binding,listbox,itemtemplate,currentitem,Wpf,Binding,Listbox,Itemtemplate,Currentitem,我有一个简单的列表框。ItemTemplate包含一个标签和一个绑定到CSLA可绑定列表的TextBox。当我选择文本框时,当前项不会更改,仅当我选择标签时才会更改。我有IsSynchronizedWithCurrentItem='True' <ListBox x:Name="ItemsDataGrid" ItemsSource="{Binding Source={StaticResource AuditItems},Path=Items}" IsSyn
列表框。ItemTemplate
包含一个标签
和一个绑定到CSLA可绑定列表的TextBox
。当我选择文本框
时,当前项
不会更改,仅当我选择标签
时才会更改。我有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>
发生这种情况是因为文本框正在处理MouseDown事件。设置为时,它将不会到达包含的ListBoxItem。解决此问题的最简单方法是只处理PreviewMouseDown中ListBoxItems的选择,这将在实际的MouseDown事件出现之前发生并向下挖掘
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="PreviewMouseDown"
Handler="ListBoxItem_PreviewMouseDown" />
</Style>
</ListBox.ItemContainerStyle>
尝试将其添加到您的列表框中。每当任何包含的元素(如TextBox)获得键盘焦点时,它都会选择该项。类似的方法也可以仅用于触发器中的简单setter,但这会干扰ICollectionView上的CurrentItem设置:
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Trigger.EnterActions>
<BeginStoryboard x:Name="SetSelected">
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsSelected">
<DiscreteBooleanKeyFrame KeyTime="0:00" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="SetSelected"/>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
非常好,经过深思熟虑!
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Trigger.EnterActions>
<BeginStoryboard x:Name="SetSelected">
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsSelected">
<DiscreteBooleanKeyFrame KeyTime="0:00" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="SetSelected"/>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>