Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf项目模板CurrentItem_Wpf_Binding_Listbox_Itemtemplate_Currentitem - Fatal编程技术网

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>