Нажав на заголовок столбца gridview, весь gridview пытается закрыть окно. - PullRequest
4 голосов
/ 06 марта 2012

Я сортирую 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>

1 Ответ

0 голосов
/ 02 июня 2015

Вы должны подписаться на событие RequestBringIntoView ListView и пометить его как Обработанный.

Это должно препятствовать прокрутке 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...