Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Семантический масштаб позволяет пользователю переключаться между двумя различными представлениями одного и того же содержимого, чтобы они могли быстро перемещаться по большому набору сгруппированных данных.
- Увеличенное представление — это основное представление содержимого. Это основное представление, в котором отображаются отдельные элементы данных.
- Увеличенное представление — это представление более высокого уровня одного и того же содержимого. Обычно в этом представлении отображаются заголовки групп для группированного набора данных.
Например, при просмотре адресной книги пользователь может увеличить масштаб, чтобы быстро перейти к букве "W" и увеличить масштаб этой буквы, чтобы увидеть имена, связанные с ним.
Функции:
- Размер отдалённого представления ограничивается границами семантического контроля масштаба.
- Касание заголовка группы переключает представления. Включить переключение между представлениями можно с помощью жеста сжатия.
- Активные заголовки переключаются между представлениями.
Это правильный элемент управления?
Используйте элемент управления SemanticZoom , когда необходимо отобразить групповый набор данных, который достаточно велик, чтобы он не отображался на одной или двух страницах.
Не путайте семантический масштабирование с оптическим масштабированием. Хотя они используют как одно и то же взаимодействие, так и базовое поведение (отображение более или менее подробно на основе коэффициента масштабирования), оптическое масштабирование относится к корректировке увеличения области содержимого или объекта, например фотографии. Сведения об элементе управления, выполняющего оптическое масштабирование, см. в элементе управления ScrollViewer .
Рекомендации
- При использовании семантического масштабирования в приложении убедитесь, что макет элемента и направление прокрутки не изменяются в зависимости от уровня масштабирования. Макеты и взаимодействия при перемещении изображения должны быть согласованными и предсказуемыми на разных уровнях масштабирования.
- Семантический масштаб позволяет пользователю быстро переходить к содержимому, поэтому ограничение количества страниц или экранов до трех в режиме увеличения масштаба. Слишком много панорамирования уменьшает практическую пользу семантического масштабирования.
- Избегайте использования семантического масштабирования, чтобы изменить область содержимого. Например, фотоальбом не должен переключаться на представление папок в Проводнике.
- Используйте структуру и семантику, необходимые для представления.
- Используйте имена групп для элементов в группированной коллекции.
- Используйте порядок сортировки для коллекции, которая негруппирована, но отсортирована, например хронологическая для дат или алфавитного списка имен.
Примеры
Коллекция WinUI
Раздел SemanticZoom в коллекции элементов управления демонстрирует интерфейс навигации, позволяющий пользователям быстро изменять масштаб сгруппированных разделов типов элементов управления.
Приложение "Фотографии"
Ниже приведен семантический масштаб, используемый в приложении "Фотографии". Фотографии группируются по месяцам. Выбор заголовка месяца в представлении сетки по умолчанию уменьшает масштаб до списка месяцев для более быстрой навигации.
Создать семантический зум
- Важные API:SemanticZoom,класс ListView, класс GridView
Приложение WinUI 3 Gallery включает интерактивные примеры большинства элементов управления, особенностей и функциональности WinUI 3. Получение приложения из Microsoft Store или получение исходного кода на GitHub
Элемент управления SemanticZoom не имеет собственного визуального представления. Это элемент управления-хоста, который управляет переходом между двумя другими элементами управления, предоставляющими представления вашего содержимого, как правило, использованием элементов управления ListView или GridView. Вы устанавливаете элементы управления представлениями в свойствах ZoomedInView и ZoomedOutView компонента SemanticZoom.
3 элемента, необходимых для семантического масштабирования:
- Сгруппированный источник данных (группы задаются определением GroupStyle в масштабированном представлении).
- Увеличенное изображение, показывающее данные уровня элемента.
- Представление с увеличением масштаба, показывающее данные уровня группы.
Прежде чем использовать семантический масштаб, необходимо понять, как использовать представление списка с сгруппированных данных. Дополнительные сведения см. в представлении списка и представлении сетки.
Примечание.
Чтобы определить увеличенное и уменьшенное представление элемента управления SemanticZoom, можно использовать любые два элемента управления, реализующие интерфейс ISemanticZoomInformation. Платформа XAML предоставляет 3 элемента управления, реализующие этот интерфейс: ListView, GridView и Hub.
В этом XAML показана структура элемента управления SemanticZoom. Другие элементы управления назначаются свойствам ZoomedInView и ZoomedOutView.
<SemanticZoom>
<SemanticZoom.ZoomedInView>
<!-- Put the GridView for the zoomed in view here. -->
</SemanticZoom.ZoomedInView>
<SemanticZoom.ZoomedOutView>
<!-- Put the ListView for the zoomed out view here. -->
</SemanticZoom.ZoomedOutView>
</SemanticZoom>
Примеры взяты со страницы SemanticZoom примера галереи WinUI. Чтобы просмотреть код полностью, включая источник данных, нужно загрузить этот пример. Этот семантический зум использует GridView для отображения увеличенного вида и ListView для отображения уменьшенного вида.
Определение увеличенного представления
Ниже приведен элемент управления GridView для масштабированного представления. В увеличенном представлении должны отображаться отдельные элементы данных в группах. В этом примере показано, как отображать элементы в сетке с изображением и текстом.
<SemanticZoom.ZoomedInView>
<GridView ItemsSource="{x:Bind cvsGroups.View}"
ScrollViewer.IsHorizontalScrollChainingEnabled="False"
SelectionMode="None"
ItemTemplate="{StaticResource ZoomedInTemplate}">
<GridView.GroupStyle>
<GroupStyle HeaderTemplate="{StaticResource ZoomedInGroupHeaderTemplate}"/>
</GridView.GroupStyle>
</GridView>
</SemanticZoom.ZoomedInView>
Внешний вид заголовков группы определяется в ресурсе ZoomedInGroupHeaderTemplate
. Внешний вид элементов определяется в ресурсе ZoomedInTemplate
.
<DataTemplate x:Key="ZoomedInGroupHeaderTemplate" x:DataType="data:ControlInfoDataGroup">
<TextBlock Text="{x:Bind Title}"
Foreground="{ThemeResource ApplicationForegroundThemeBrush}"
Style="{StaticResource SubtitleTextBlockStyle}"/>
</DataTemplate>
<DataTemplate x:Key="ZoomedInTemplate" x:DataType="data:ControlInfoDataItem">
<StackPanel Orientation="Horizontal" MinWidth="200" Margin="12,6,0,6">
<Image Source="{x:Bind ImagePath}" Height="80" Width="80"/>
<StackPanel Margin="20,0,0,0">
<TextBlock Text="{x:Bind Title}"
Style="{StaticResource BaseTextBlockStyle}"/>
<TextBlock Text="{x:Bind Subtitle}"
TextWrapping="Wrap" HorizontalAlignment="Left"
Width="300" Style="{StaticResource BodyTextBlockStyle}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
Определение уменьшенного представления
Этот XAML определяет элемент управления ListView для масштабированного представления. В этом примере показано, как отображать заголовки групп в виде текста в списке.
<SemanticZoom.ZoomedOutView>
<ListView ItemsSource="{x:Bind cvsGroups.View.CollectionGroups}"
SelectionMode="None"
ItemTemplate="{StaticResource ZoomedOutTemplate}" />
</SemanticZoom.ZoomedOutView>
Внешний вид определяется в ресурсе ZoomedOutTemplate
.
<DataTemplate x:Key="ZoomedOutTemplate" x:DataType="wuxdata:ICollectionViewGroup">
<TextBlock Text="{x:Bind Group.(data:ControlInfoDataGroup.Title)}"
Style="{StaticResource SubtitleTextBlockStyle}" TextWrapping="Wrap"/>
</DataTemplate>
Синхронизация представлений
Представление с увеличенным увеличением и увеличенное представление должно быть синхронизировано, поэтому если пользователь выбирает группу в увеличенном представлении, сведения о той же группе отображаются в представлении с увеличением масштаба. Вы можете использовать CollectionViewSource или добавить код для синхронизации представлений.
Все элементы управления, которые привязываются к одному элементу CollectionViewSource, всегда имеют один и тот же текущий элемент. Если оба представления используют тот же CollectionViewSource, что и источник данных, коллекцияViewSource синхронизирует представления автоматически. Дополнительные сведения см. в статье CollectionViewSource.
Если вы не используете CollectionViewSource для синхронизации представлений, необходимо обработать событие ViewChangeStarted и синхронизировать элементы в обработчике событий, как показано здесь.
<SemanticZoom x:Name="semanticZoom" ViewChangeStarted="SemanticZoom_ViewChangeStarted">
private void SemanticZoom_ViewChangeStarted(object sender, SemanticZoomViewChangedEventArgs e)
{
if (e.IsSourceZoomedInView == false)
{
e.DestinationItem.Item = e.SourceItem.Item;
}
}
UWP и WinUI 2
Внимание
Сведения и примеры, приведенные в этой статье, оптимизированы для приложений, использующих Windows App SDK и WinUI 3, но, как правило, применимы и к приложениям UWP, использующим WinUI 2. См. справочник по API UWP для конкретных сведений и примеров платформы.
В этом разделе содержатся сведения, необходимые для использования элемента управления в приложении UWP или WinUI 2.
API для этого элемента управления существуют в пространстве имен Windows.UI.Xaml.Controls .
- API UWP:Class SemanticZoom, класс ListView, класс GridView
- Откройте приложение WinUI 2 Gallery и посмотрите, как работает SemanticZoom в действии. Приложение WinUI 2 Gallery включает интерактивные примеры большинства элементов управления, функций и возможностей WinUI 2. Получите приложение из Microsoft Store или получите исходный код на GitHub.
Мы рекомендуем использовать последнюю версию WinUI 2 , чтобы получить самые актуальные стили и шаблоны для всех элементов управления.
Связанные статьи
Windows developer