ОК, ребята, мне удалось сделать то, что я хотел!
Как?Вот оно ...
Во-первых, часть 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 перестает адаптироваться, и я могу прокручивать по горизонтали, чтобы увидеть отсутствующие столбцы.
Ура!