uwp adaptiveGridView выдает исключение в OneRowMode

У меня есть следующее исключение в моем адаптивном представлении набора инструментов сообщества uwp

«System.ArgumentException: значение не попадает в ожидаемый диапазон. \ R \ n в Windows.UI.Xaml.FrameworkElement.SetBinding (DependencyProperty dp, привязка BindingBase) \ r \ n в Microsoft.Toolkit.Uwp.UI.Controls. AdaptiveGridView.DetermineOneRowMode () \ r \ n в Microsoft.Toolkit.Uwp.UI.Controls.AdaptiveGridView.OnLoaded (отправитель объекта, RoutedEventArgs e) "

XAML

<controls:AdaptiveGridView Name="AllVideosGridView" 
                                           OneRowModeEnabled="True"
                                           MaxHeight="260"
                                           ScrollViewer.HorizontalScrollMode="Enabled"
                                           ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                           ItemClick="AllVideosGridView_ItemClick"
                                           Style="{StaticResource MainGridView}"
    <...data template and other stuff...>
</controls.........>

ошибка возникает из-за того, что свойство OneRowModeEnabled имеет значение True, и если я удалю это свойство, оно будет работать нормально, и после запуска приложения я установил для этого свойства значение true, в то время как приложение работает, оно не показывает никаких исключений, а gridview переходит в одну строку режим как надо.

Кроме того, код позади не имеет значения, потому что я пытался похвалить код, который инициализирует источник элементов, но это исключение все еще возникает.


person Muhammad Touseef    schedule 03.06.2017    source источник
comment
Я не могу воспроизвести вашу проблему с AdaptiveGridView по умолчанию. Поделитесь минимальным воспроизводимым примером, который может воспроизвести вашу проблему.   -  person Jay Zuo    schedule 07.06.2017
comment
вот образец и минимальное репо с образцом проекта, который вызывает это исключение. github.com/touseefbsb/AdaptiveGridViewTest.git   -  person Muhammad Touseef    schedule 07.06.2017


Ответы (1)


Проблема здесь в том, что вы не установили свойство ItemHeight в AdaptiveGridView.

Из исходного кода AdaptiveGridView вы можете найти следующий код (L155-L186):

private void OnLoaded(object sender, RoutedEventArgs e)
{
    _isLoaded = true;
    DetermineOneRowMode();
}

private void DetermineOneRowMode()
{
    if (_isLoaded)
    {
        var itemsWrapGridPanel = ItemsPanelRoot as ItemsWrapGrid;

        if (OneRowModeEnabled)
        {
            var b = new Binding()
            {
                Source = this,
                Path = new PropertyPath("ItemHeight")
            };

            if (itemsWrapGridPanel != null)
            {
                _savedOrientation = itemsWrapGridPanel.Orientation;
                itemsWrapGridPanel.Orientation = Orientation.Vertical;
            }

            SetBinding(MaxHeightProperty, b);
            ...

Если для OneRowModeEnabled установлено значение True, он привяжет MaxHeightProperty к свойству ItemHeight. Однако, поскольку вы не установили значение для свойства ItemHeight, его значение будет NaN. Вот почему у вас Value does not fall within the expected range. ошибка.

Чтобы решить эту проблему, вы можете установить свойство ItemHeight следующим образом:

 <controls:AdaptiveGridView Name="AllVideosGridView"
                                   OneRowModeEnabled="True"
                                   DesiredWidth="260"
                                   ItemHeight="200"
                                   SelectionMode="None"
                                   StretchContentForSingleRow="False"
                                   IsItemClickEnabled="True"
                                   ItemsSource="{x:Bind ViewModel.Videos, Mode=OneWay}">
    ...
</controls:AdaptiveGridView>
person Jay Zuo    schedule 08.06.2017
comment
есть ли способ установить для ItemHieght значение Auto? и все равно будет работать? - person Muhammad Touseef; 08.06.2017