首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wpf ItemTemplate CurrentItem

Wpf ItemTemplate CurrentItem
EN

Stack Overflow用户
提问于 2010-01-22 00:03:33
回答 2查看 916关注 0票数 0

我有一个简单的ListBox.ItemTemplate,其中包含一个Label和一个绑定到CSLA Bindable ListTextBox。当我选择TextBox时,CurrentItem不会改变,只有当我选择Label时,它才会改变。我有IsSynchronizedWithCurrentItem='True'

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-23 05:54:19

尝试将其添加到您的ListBox中。每当任何包含的元素(如TextBox)获得键盘焦点时,它都会选择该项。类似的方法也可以用于触发器中的简单设置器,但这往往会干扰ICollectionView上的CurrentItem设置:

代码语言:javascript
复制
         <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>
票数 2
EN

Stack Overflow用户

发布于 2010-01-22 01:34:20

这是因为TextBox正在处理MouseDown事件。因为它被设置为bubble up,所以它将不会到达包含的ListBoxItem。解决这个问题的最简单方法是在PreviewMouseDown中处理ListBoxItems的选择,这将在实际的MouseDown事件出现之前发生并向下传输。

代码语言:javascript
复制
<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
        <EventSetter Event="PreviewMouseDown"
                     Handler="ListBoxItem_PreviewMouseDown" />
    </Style>
</ListBox.ItemContainerStyle>

在xaml文件的代码隐藏中:

代码语言:javascript
复制
private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var item = (sender as ListBoxItem);
    if (item != null)
        item.IsSelected = true;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2110680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档