locked
Вид GridView в зависимости от разрешения и плотности пикселей RRS feed

  • Вопрос

  • Всем привет,

    коллеги, кто как решает проблему отображения приложения при разных разрешениях и плотности пикселей?

    Если для GridView задать жестко 3 ряда, то приложение хорошо выглядит на разрешении 1360x768, а также выше, если плотность пикселей также выше, картинки масштабируются, также хорошо выглядит при обычной плотности пикселей при разрешении 1920х1080, но если в симуляторе выбрать 2560x1440 и диагональ от 23 дюймов, то 3 рядов уже недостаточно, остается много свободного места на экране, хотелось бы в таком случае выставлять 5 рядов, как из кода можно этим управлять? Автоматическая подгонка рядов не подходит в моем случае, так как в нижней части все же хотелось бы оставить место.

    5 сентября 2013 г. 7:26

Ответы

  • Добрый день.

    Не очень понял вопроса. Вы же можете программно определить какое разрешение экрана? На всякий пожарный:

    var bounds = Window.Current.Bounds;
    double height = bounds.Height;
    double width = bounds.Width;

     Ну и в зависимости от полученного значения устанавливайте количество рядов.

    P.s. Если вдруг не читали, то вот будет интересно.

    5 сентября 2013 г. 11:50
    Отвечающий
  • Мне кажется, что вы что-то путаете. Если у вас привязано к разрешению, то DPI вас волновать не будет. Почему? Да потому, что у вас пропорция сверху и снизу, будет одна и та же. DPI влияет на качество картинки, да и то растровой...

    5 сентября 2013 г. 13:05
    Отвечающий
  • Если верить MSDN, то это свойство доступно и для чтения и для записи.
    • Помечено в качестве ответа Andev 17 сентября 2013 г. 18:21
    17 сентября 2013 г. 7:19
    Отвечающий
  • С тем, что это у вас контрол внутри ItemsPanelTemplate. Обычно шаблон проще пересоздать, чем пытаться менять его из кода.

    • Помечено в качестве ответа Andev 18 сентября 2013 г. 6:20
    17 сентября 2013 г. 18:54
    Отвечающий

Все ответы

  • Добрый день.

    Не очень понял вопроса. Вы же можете программно определить какое разрешение экрана? На всякий пожарный:

    var bounds = Window.Current.Bounds;
    double height = bounds.Height;
    double width = bounds.Width;

     Ну и в зависимости от полученного значения устанавливайте количество рядов.

    P.s. Если вдруг не читали, то вот будет интересно.

    5 сентября 2013 г. 11:50
    Отвечающий
  • Добрый день.

    Не очень понял вопроса. Вы же можете программно определить какое разрешение экрана? На всякий пожарный:

    var bounds = Window.Current.Bounds;
    double height = bounds.Height;
    double width = bounds.Width;

     Ну и в зависимости от полученного значения устанавливайте количество рядов.

    P.s. Если вдруг не читали, то вот будет интересно.


    Ваш подход интересный, а плотность пикселей как можно определить? Вы же знаете, что на планшете с разрешением 2560х1440 и на мониторе с таким же разрешением приложение будет выглядеть совсем по-другому, остается много места в нижней части, хотелось бы его заполнить дополнительными рядами GridView (с этим тоже непонятки, почему-то это свойство только для чтения), спасибо за ссылку, почитаю.
    5 сентября 2013 г. 12:54
  • Мне кажется, что вы что-то путаете. Если у вас привязано к разрешению, то DPI вас волновать не будет. Почему? Да потому, что у вас пропорция сверху и снизу, будет одна и та же. DPI влияет на качество картинки, да и то растровой...

    5 сентября 2013 г. 13:05
    Отвечающий
  • По первой ссылке, эта ссылка есть, но на всякий пожарный еще раз: Руководство по масштабированию в зависимости от плотности пикселей.
    5 сентября 2013 г. 13:32
    Отвечающий
  • Добрый день.

    Не очень понял вопроса. Вы же можете программно определить какое разрешение экрана? На всякий пожарный:

    var bounds = Window.Current.Bounds;
    double height = bounds.Height;
    double width = bounds.Width;

     Ну и в зависимости от полученного значения устанавливайте количество рядов.

    P.s. Если вдруг не читали, то вот будет интересно.

    Алексей, вопрос как раз в том как это сделать, в статье по ссылке нашел из полезного только это:
    • Проектируйте приложение так, чтобы оно эффективно использовало пространство на большом экране и располагало гибким, автоматически адаптирующимся макетом. Не оставляйте больших пустых пространств.

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

                                <ItemsPanelTemplate>
                                    <VariableSizedWrapGrid  x:Name="LogoGrid" Orientation="Vertical" Margin="0,0,80,0" ItemWidth="180" ItemHeight="160" MaximumRowsOrColumns="3"/>
                                    <!--Доп. параметры -->
                                </ItemsPanelTemplate>
    по ссылкам всего лишь гайдлайны, а не примеры кода ( и они уже для 8.1)


    • Изменено Andev 14 сентября 2013 г. 7:30
    14 сентября 2013 г. 7:29
  • Ну и дайте возможность пользователю устанавливать количество рядов в настройках приложения. Просто после того, как пользователь выберет настройку, вы ему давайте подсказку, что при таком количестве рядов будет "много свободного места" или "возможно вся информация не поместится на экране". Ну и пишите выбранное значение в количество строк...
    16 сентября 2013 г. 6:47
    Отвечающий
  • Ну и дайте возможность пользователю устанавливать количество рядов в настройках приложения. Просто после того, как пользователь выберет настройку, вы ему давайте подсказку, что при таком количестве рядов будет "много свободного места" или "возможно вся информация не поместится на экране". Ну и пишите выбранное значение в количество строк...

    проблема в том, что непонятно как добраться к этому свойству из кода, пишет, что свойство только для чтения, как установить непонятно.
    16 сентября 2013 г. 9:27
  • А вы про какое свойство?
    16 сентября 2013 г. 9:31
    Отвечающий
  • А вы про какое свойство?
    выделил жирным
                          <GroupStyle.Panel>
                               
    <ItemsPanelTemplate>
                                   
    <VariableSizedWrapGrid  x:Name="LogoGrid" Orientation="Vertical" Margin="0,0,80,0" ItemWidth="180" ItemHeight="160" MaximumRowsOrColumns="3"/>
                               
    </ItemsPanelTemplate>
                           
    </GroupStyle.Panel> 
    • Помечено в качестве ответа Andev 17 сентября 2013 г. 13:26
    • Снята пометка об ответе Andev 17 сентября 2013 г. 13:26
    17 сентября 2013 г. 7:00
  • Если верить MSDN, то это свойство доступно и для чтения и для записи.
    • Помечено в качестве ответа Andev 17 сентября 2013 г. 18:21
    17 сентября 2013 г. 7:19
    Отвечающий
  • спасибо, Алексей, я видимо из-за своего малого опыта запутался, здесь указано, что есть только get (несколько другое свойство) http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.variablesizedwrapgrid.maximumrowsorcolumnsproperty.aspx
    • Изменено Andev 17 сентября 2013 г. 18:21
    17 сентября 2013 г. 18:20
  • Алексей, еще один вопрос к этой теме, в коде MainPage.xaml.cs я могу обратиться ко всем xaml-элементам по x:Name, а в случае  <VariableSizedWrapGrid  x:Name="LogoGrid" Orientation="Vertical"Margin="0,0,80,0" ItemWidth="180" ItemHeight="160" MaximumRowsOrColumns="3"/>

    имя LogoGrid в коде недоступно, с чем это может быть связано?

    Заранее благодарю.

    17 сентября 2013 г. 18:35
  • С тем, что это у вас контрол внутри ItemsPanelTemplate. Обычно шаблон проще пересоздать, чем пытаться менять его из кода.

    • Помечено в качестве ответа Andev 18 сентября 2013 г. 6:20
    17 сентября 2013 г. 18:54
    Отвечающий