WPF的ListView嵌套ComBox,点击它获取不到正确的选择索引解决方法
  Fmh2GeNCglWw 2023年11月02日 30 0
<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;

}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

Fmh2GeNCglWw