WPF中ListBox项内ComboBox无法点击的问题求助
问题解决:ListBox内ComboBox无法点击
你的问题根源在于ListBox设置了IsHitTestVisible="False",这个属性会让整个ListBox及其内部所有子元素都无法响应鼠标点击事件,包括你放在DataTemplate里的ComboBox。
修改方案:
直接移除ListBox的IsHitTestVisible="False"属性(默认值为True,无需额外设置)。修改后的ListBox代码如下:
<ListBox x:Name="exPanels" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" BorderThickness="0" Margin="0,20,0,0" SelectedItem="{Binding SelectedObject}"> <ListBox.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> <DataTemplate DataType="{x:Type data:Cardio}"> <Border Padding="10" BorderBrush="LightGray" BorderThickness="1"> <Grid Width="585" HorizontalAlignment="Center"> <Grid.RowDefinitions> <RowDefinition Name="Name" Height ="auto"/> <RowDefinition Name ="Type" Height ="auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Text="{Binding Name}" Grid.Row="0" Grid.Column="0" FontSize="20"/> <TextBlock Text="Distance:" Grid.Row="1" Grid.Column="0"/> <ComboBox Grid.Row="1" Grid.Column="1"/> </Grid> </Border> </DataTemplate> <DataTemplate DataType="{x:Type data:Strength}"> <Border Padding="10" BorderBrush="LightGray" BorderThickness="1"> <Grid x:Name="itembox" Width="585" HorizontalAlignment="Center"> <Grid.RowDefinitions> <RowDefinition Name="Name" Height ="auto"/> <RowDefinition Name ="Type" Height ="auto"/> <RowDefinition Name ="Difficulty" Height ="auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Text="{Binding Name}" Grid.Row="0" Grid.Column="0" FontSize="20"/> <TextBlock Text="Sets:" Grid.Row="1" Grid.Column="0"/> <ComboBox Grid.Row="1" Grid.Column="1"/> <TextBlock Text="Reps:" Grid.Row="2" Grid.Column="0"/> <ComboBox Grid.Row="2" Grid.Column="1"/> </Grid> </Border> </DataTemplate> </ListBox.Resources> </ListBox>
补充说明:
如果你原本设置IsHitTestVisible="False"是为了禁用ListBox的项选中功能,但又想保留子控件的交互,可以通过修改ItemContainerStyle单独禁用项的点击,而非整个ListBox:
<ListBox ...> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="IsHitTestVisible" Value="False"/> </Style> </ListBox.ItemContainerStyle> <!-- 其他资源和模板 --> </ListBox>
这样ListBox的项本身无法被选中,但内部的ComboBox等控件依然可以正常点击交互。
内容的提问来源于stack exchange,提问作者Madz_
相关产品推荐
相关产品推荐

