Как получить GridView / AdaptiveGridView с фиксированным количеством столбцов / строк? - PullRequest
0 голосов
/ 06 июня 2018

Я разрабатываю программное обеспечение электронного инвентаря, которое копирует ящики организаторов, поэтому мне нужно подражать тому факту, что у этих организаторов есть столбцы X и строки Y.

Сейчас я используюAdaptiveGridView (из Microsoft.Toolkit.Uwp.UI.Controls), и я привязываю DesiredWidth к вычисляемому значению == размер AdaptiveGridView / количество желаемых столбцов.

Это работает, но естьПредостережение: когда я достигаю минимального размера, AdaptiveGridView принимает значение DesiredWidth (около 44), количество столбцов начинает уменьшаться (для адаптации Windows, которая является ее целью, я знаю:))

Я попытался зафиксировать MinWidth AdaptiveGridView до 44 * числа столбцов, и это работает, но затем я не вижу столбцы в правом нижнем углу => они начинают скрываться с правой стороны окна.

Я попытался включить горизонтальную прокрутку, поместить AdaptiveGridView в Scrollviewer,… но я не могу получить скрытые столбцычтобы получить доступ.

Итак, у вас есть идея:

  • получить GridView с фиксированным числом столбцов и строк?
  • получитьAdaptiveGridView, чтобы позволить мне прокручивать по горизонтали, когда его размер больше, чем окно?

Спасибо всем!

1 Ответ

0 голосов
/ 07 июня 2018

ОК, ребята, мне удалось сделать то, что я хотел!

Как?Вот оно ...

Во-первых, часть XAML.Я инкапсулировал AdaptiveGridView в Grid и Grid в ScrollViewer.Наиболее важным элементом здесь является промежуточная сетка.Действительно, я связываю его свойство MinWidth с минимальным размером, который AdaptiveGridView допускает для элемента * количество столбцов, которое мне нужно, и я также привязываю его Width к свойству ViewportWidth Scrollviewer:

<ScrollViewer Name="ScrlV" ZoomMode="Enabled" MaxZoomFactor="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" HorizontalScrollMode="Auto" SizeChanged="ScrlV_SizeChanged">
     <Grid MinWidth="{Binding MinGridSize}" Width="{Binding ElementName=ScrlV, Path=ViewportWidth}">
          <control:AdaptiveGridView HorizontalAlignment="Stretch" Name="itemsGrid" CanReorderItems="True" CanDragItems="True" ItemsSource="{Binding List}" DesiredWidth="{Binding ReqWidth}" Height="auto" ItemTemplate="{StaticResource DrawerItem}" SelectionChanged="itemsGrid_SelectionChanged" AllowDrop="True" DragItemsCompleted="itemsGrid_DragItemsCompleted" />
     </Grid>
</ScrollViewer>

Итак,в результате, когда я изменяю размер окна, я получаю событие и изменяю свое свойство CurrWidth соответственно:

    private void itemsGrid_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        Items.CurrWidth = (int)e.NewSize.Width;
    }

Затем в фоновом режиме обрабатываются значения MinGridSize & ReqWidth (минимальная ширина столбцаset @ 50):

public int CurrWidth
{
    get
    {
        return currwidth;
    }
    set
    {
        currwidth = value;
        OnPropertyChanged(new PropertyChangedEventArgs("CurrWidth"));
        OnPropertyChanged(new PropertyChangedEventArgs("ReqWidth"));
        OnPropertyChanged(new PropertyChangedEventArgs("MinGridSize"));
    }
}
public int MinGridSize
{
    get
    {
       return 50 * NbrCol;
    }
}
public int ReqWidth
{
   get
   {
      double width = 0;
      if(NbrCol > 0 && CurrWidth > 0)
      {
         width = CurrWidth / NbrCol;
      }
      else
      {
         width = 50;
      }
      return (int)Math.Round(width, 0);
   }
}

Итак, AdaptiveGridView получает свой набор свойств DesiredWidth, а Grid также получает свой набор MinWidth.

В конце ширина Scrollviewer становится оконной.внутренняя сетка соответствующим образом адаптируется к Scrollviewer ViewportWidth, но ограничена минимальной шириной = числом желаемых столбцов * минимальным размером столбца.И AdaptiveGridView играет свою роль всякий раз, когда я изменяю ширину окна, пока не достигну минимальной ширины.Когда это происходит, сетка перестает уменьшаться, AdaptiveGridView перестает адаптироваться, и я могу прокручивать по горизонтали, чтобы увидеть отсутствующие столбцы.

Ура!

...