WPF DataGrid отключить автопрокрутку - PullRequest
1 голос
/ 22 июня 2019

В основном у меня есть приложение, которое поможет мне отсортировать / каталогизировать мою коллекцию фотографий и фильмов.Это действительно просто, у меня есть DataGrid, в котором перечислены все файлы в определенной папке.Есть два столбца: Keep и Filename.Я бы пошел вниз по этой DataGrid, используя стрелки и нажимая пробел, хочу ли я сохранить файл (первый столбец - bool, поэтому, когда я нажимаю пробел, флажок проверяется).Поэтому, не нажимая ничего, это выглядит так:

enter image description here

Но когда я нажимаю на имя файла (когда я нажимаю на ту же строку, но Keepстолбец, он не прокручивается, но он намного меньше по сравнению со столбцом имени файла, поэтому в итоге я всегда нажимаю на часть столбца имени файла в строке) и слишком долго он прокручивается по горизонтали, например:

enter image description here

Проблема в том, что теперь я не вижу столбец Keep, поэтому мне нужно вручную прокрутить назад, чтобы увидеть, пометил ли я файл или нет.Чтобы решить эту проблему, я увидел много ответов на SO, в которых предлагалось редактировать часть XAML MainWindow.Проблема в том, что это мой XAML-файл:

<Controls:MetroWindow x:Class="FileOrganiser.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
        xmlns:local="clr-namespace:FileOrganiser"
        mc:Ignorable="d"
        Title="File Organiser" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="1*" />
            <RowDefinition Height="8*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
        <MediaElement x:Name="Media" Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" Margin="5"/>
        <DataGrid x:Name="FilesList" Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"
                  SelectionChanged="FilesList_OnSelectionChanged">
        </DataGrid>
        <Button x:Name="ButtonSOrt" Grid.Column="1" Grid.Row="2"></Button>
    </Grid>
</Controls:MetroWindow>

Важная часть заключается в том, что я не определяю столбцы самостоятельно, и вот как я заполняю сетку данных:

public MainWindow()
{
    InitializeComponent();
    while (true)
    {
        RootDir = FileUtils.SelectRootFolder();
        if (RootDir == string.Empty) MessageBox.Show("Select a root folder!");
        else break;
    }
    files = Directory.GetFiles(RootDir);
    var videos = files.Select(file => new Video(Path.GetFileName(file), false)).ToList();
    FilesList.ItemsSource = videos;
}

Так что я делаю это, изменяя ItemSource в коде.И если бы я сам определил столбцы и также изменил ItemSource следующим образом, у меня было бы 4 столбца вместо 2. Так есть ли способ предотвратить эту автопрокрутку, когда я реализую ее таким образом?

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Решил сделать этот другой ответ, так как это должно быть предпочтительным способом, так как он дает вам намного больший контроль над вашим макетом:

поместите это в свой XAML:

<DataGrid x:Name="FilesList" HorizontalAlignment="Center" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding Keep}" Width="25"/>
        <DataGridTextColumn Binding="{Binding Filename}" Width="*"/>
    </DataGrid.Columns>
</DataGrid>

в вашем коде не должно быть никаких изменений.

0 голосов
/ 22 июня 2019

Датагрид должен иметь прикрепленное свойство для этого: https://docs.microsoft.com/de-de/dotnet/api/system.windows.controls.scrollviewer.horizontalscrollbarvisibility?view=netframework-4.8

Установите для этого параметра значение «Отключено»:

Scrollviewer.HorizontalScrollBarVisibility="Disabled"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...