WPF 单击“列表框项”中的控件不会选择“列表框项”

本文关键字:列表框项 列表 选择 控件 WPF 单击 | 更新日期: 2023-09-27 18:08:01

嗨,我找不到任何类似的问题,所以我发布了新问题。在下面的代码中,我使用列表框项创建列表框控件,每个控件都包含单选按钮。当我单击单选按钮时,它会选择,但父列表框项不会(列表框项未突出显示(。如何解决此问题?

<ListBox Margin="0, 5, 0, 0" ItemsSource="{Binding mySource, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" SelectionMode="Single">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!-- Rabio template -->
            <RadioButton GroupName="radiosGroup"
                     Margin="10, 2, 5, 2"
                     Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedSetting}"
                     CommandParameter="{Binding SomeId, Mode=OneWay}"
                     Content="{Binding FileNameWithoutExtensions, Mode=OneWay}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

WPF 单击“列表框项”中的控件不会选择“列表框项”

您可以通过将

以下ItemContainerStyle应用于使用属性IsKeyboardFocusWithin Trigger来选择它ListBox来实现此目的。

<ListBox>
    <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
         <Style.Triggers> 
           <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
              <Setter Property="IsSelected" Value="True"/> 
           </Trigger> 
         </Style.Triggers>
       </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

我有一个列表框,可以垂直、水平地显示ListBoxItem,并且每个ListBoxItem中包含各种子按钮。

我遇到的问题(像其他人一样(是当您单击ListBoxItem中包含的子按钮时,未选择ListBoxItem,并且无法获取ListBoxItem.SelectedIndex值(因为单击按钮不会选择ListBoxItem(。

我在实现上述 xaml 代码时遇到了一些问题,因为单击我的 GroupBox 标头会导致我选择的ListBoxItem失去焦点。

我在网络上找到的解决此问题的最佳解决方案是向按钮的鼠标单击事件添加几行代码以确定父控件,然后设置ListBoxItem.IsSelected = true

完成此操作后,ListBoxItem.SelectedIndex将包含所选项目的正确索引值。 在我的代码中,DataContext在Listbox上设置如下:DataContext="{StaticResource VM_Programs}"

下面是按钮事件的 VB 代码:

Private Sub YourButton_Click(sender As Object, e As RoutedEventArgs)
    Dim clicked As Object = (TryCast(e.OriginalSource, FrameworkElement)).DataContext
    Dim lbitem As ListBoxItem
    lbitem = YourListboxName.ItemContainerGenerator.ContainerFromItem(clicked)
    lbitem.IsSelected = True
    MsgBox("The listbox item (" + YourListboxName.SelectedIndex.ToString + ") is now selected")
End Sub