<ComboBox Width="190" SelectedValue="{Binding CeBanType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding CeBanTypeList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Height="20" SelectionChanged="ComboBox_SelectionChanged" PreviewMouseDown="ComboBox_PreviewMouseDown" PreviewMouseWheel="ComboBox_PreviewMouseWheel"/>
当点击 ComboBox 所在的单元格时,如果你尝试获取的行号不正确,可能是因为 ComboBox 会拦截鼠标点击事件,导致事件不传递给 ListView,从而无法正确获取行号。
在ComBox 上添加PreviewMouseDown 事件,当点击 ComboBox 时,PreviewMouseDown 事件仍然会在 ListView 上触发,可以通过事件参数获取正确的行号。
<ListView>
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox PreviewMouseDown="ComboBox_PreviewMouseDown" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
private void ComboBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
ComboBox comboBox = (ComboBox)sender;
ListViewItem listViewItem = FindAncestor<ListViewItem>(comboBox);
if (listViewItem != null)
{
int rowIndex = CeBanLeft.Items.IndexOf(listViewItem.DataContext);
// 使用 rowIndex,执行你想要的操作
}
}
private static T FindAncestor<T>(DependencyObject current)
where T : DependencyObject
{
do
{
if (current is T ancestor)
return ancestor;
current = VisualTreeHelper.GetParent(current);
} while (current != null);
return null;
}