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 -->