0

aと a にバインドされた aListBox.ItemTemplateを含む単純なものがあります。を選択しても変化せず、 を選択した場合のみ変化します。私は持っています。LabelTextBoxCSLA Bindable ListTextBoxCurrentItemLabelIsSynchronizedWithCurrentItem='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>
4

2 に答える 2

2

これを ListBox に追加してみてください。含まれている要素 (TextBox など) がキーボード フォーカスを取得するたびに、項目が選択されます。Trigger の単純な 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>
于 2010-01-22T21:54:18.650 に答える
0

これは、TextBox が MouseDown イベントを処理しているためです。バブルアップするように設定されているため、含まれている ListBoxItem には到達しません。これを修正する最も簡単な方法は、PreviewMouseDown で ListBoxItems の選択を処理することです。これは、実際の MouseDown イベントが発生する前に発生し、トンネル ダウンします。

<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
        <EventSetter Event="PreviewMouseDown"
                     Handler="ListBoxItem_PreviewMouseDown" />
    </Style>
</ListBox.ItemContainerStyle>

xaml ファイルのコード ビハインドでは、次のようになります。

private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var item = (sender as ListBoxItem);
    if (item != null)
        item.IsSelected = true;
}
于 2010-01-21T17:34:19.787 に答える