c# - 单击 gridview 列标题整个 gridview 试图覆盖窗口

标签 c# .net wpf xaml gridview

我通过单击列标题对 GridView 进行排序。但是,当我向 gridview 添加更多项目并且它变得可滚动时,第一次单击列标题不会对项目进行排序。相反,它将 gridview 向上移动并尝试显示可用空间中的所有项目。

我必须设置一些属性来防止这种情况发生吗?这是 GridView 的代码:

<Window x:Class="AutomatedExitStrategy.Presentation.View.AutomatedExitStrategyShell"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Automated Exit Strategy System" Height="480" 
    Width="2125">

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
    <Grid Opacity="1">
    <Grid.RowDefinitions>
        <RowDefinition Height="0.20*"/>
        <RowDefinition Height="0.80*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <ListView
            Grid.Row="1" 
            Margin="0,2,0,0" 
            IsSynchronizedWithCurrentItem="True" 
            ItemsSource="{Binding GlobalRowsCollection}"
            AlternationCount="2">
            <ListView.View>
                <GridView>
                    <GridViewColumn
                        Width="25">
                        <GridViewColumnHeader Command="{Binding SortList}" CommandParameter="IsEnabled"></GridViewColumnHeader>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Margin="0"
                                          VerticalAlignment="Center"
                                          HorizontalAlignment="Left"
                                          IsChecked="{Binding IsChecked}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn 
                        Width="Auto">
                        <GridViewColumnHeader Command="{Binding SortList}" CommandParameter="InputViewModel.Group">Grp</GridViewColumnHeader>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Grid>
                                    <TextBlock Text="{Binding InputViewModel.Group}" 
                                               Style="{StaticResource GridBlockStyle}"
                                               HorizontalAlignment="Center"/>
                                </Grid>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

最佳答案

您应该订阅 ListView 的 RequestBringIntoView 事件并将其标记为已处理。

这应该可以防止 ScrollViewer 在单击时向下滚动以尝试显示整个 ListView。因此,它应该允许 MouseDown 事件继续进行并触发排序。

<ListView Grid.Row="1" 
          Margin="0,2,0,0" 
          IsSynchronizedWithCurrentItem="True" 
          ItemsSource="{Binding GlobalRowsCollection}"
          AlternationCount="2"
          RequestBringIntoView="ListView_RequestBringIntoView">
    ...
</ListView>

关于代码隐藏...

public void ListView_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
    e.Handled = true;
}

关于c# - 单击 gridview 列标题整个 gridview 试图覆盖窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588729/

相关文章:

javascript - ASP文本框默认不可见,从JS可见

c# - 从字符串中删除除字母以外的所有内容

c# - 为什么接口(interface)不能继承纯抽象类

c# - 如何删除 DateTime.Parse 对 System.Threading.Thread.CurrentThread.CurrentCulture 的依赖

c# - 在 SharePoint 2010 中复制或移动文档库

c# - 如何创建约会并将约会发送到 Microsoft Outlook 日历?

.net - 正则表达式的默认初始化选项是什么?

c# - 如何在wpf中动态添加ComboBox项目

wpf Prism 复合命令

c# - MediaElement 支持哪些格式?