Wpf 如何在使用ItemTemplate时获取ListBoxItem的单击事件

Wpf 如何在使用ItemTemplate时获取ListBoxItem的单击事件,wpf,listbox,Wpf,Listbox,我有一个列表框,其中包含项目中的文本框,我希望当我单击文本框时,应该选择文本框所在的项目。在添加之前: <Window.Resources> <Style TargetType="ListBoxItem"> <Style.Triggers> <EventTrigger RoutedEvent="PreviewGotKeyboardFocus"> <BeginSto

我有一个列表框,其中包含项目中的文本框,我希望当我单击文本框时,应该选择文本框所在的项目。在添加之前:

<Window.Resources>
    <Style TargetType="ListBoxItem">
        <Style.Triggers>
            <EventTrigger RoutedEvent="PreviewGotKeyboardFocus">
                <BeginStoryboard>
                    <Storyboard>
                        <BooleanAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(ListBoxItem.IsSelected)">

                            <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
                        </BooleanAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Opacity" Value="1.0" />
            </Trigger>
        </Style.Triggers>
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
                         Color="Blue"/>
        </Style.Resources>
        <Setter Property="Background" Value="Red" />
        <Setter Property="MaxHeight" Value="75" />

    </Style>
    <DataTemplate x:Key="dtTeamInGame">
        <WrapPanel  >
            <TextBox x:Name="txtPath" Text="{Binding Path = Number, Mode=TwoWay}" MinWidth="35" ></TextBox>
            <TextBox x:Name="txtPath2" Text="{Binding Path = KnownName, Mode=TwoWay}" MinWidth="125"  ></TextBox>

        </WrapPanel>

    </DataTemplate>
</Window.Resources>
<Grid>
    <ListBox  x:Name="listBox" ItemTemplate="{DynamicResource dtTeamInGame}" HorizontalAlignment="Left" Height="100" Margin="29,184,0,0" VerticalAlignment="Top" Width="381">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDownHome" />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="335,108,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>

</Grid>


如果单击某个项目中的文本框,将选中列表框项目。如果我删除上面的容器样式,它将按预期工作,但我需要容器样式,因为如果用户单击已选择的项目,我希望执行一些任务。

听起来您希望保留默认的
ListBoxItem
样式的行为,但您也希望向其中添加自己的内容。这很简单:使用样式的
BasedOn
属性从现有默认样式继承

<ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDownHome" />
        </Style>
</ListBox.ItemContainerStyle>


如果您将ItemContainerStyle基于默认的ListBoxItem样式,是否有帮助<代码>是!,干杯@EdPlunkett如果你把它作为一个答案贴出来,我会记下来的。干杯,J
<ListBox.ItemContainerStyle>
    <Style 
        TargetType="ListBoxItem" 
        BasedOn="{StaticResource {x:Type ListBoxItem}}"
        >
        <!-- Your stuff -->