Я пытаюсь использовать ParallaxView
для создания изображения в параллаксе GridViewItem
при прокрутке GridView
. Предполагаемый эффект такой же, как новостная лента в приложении Xbox UWP на ПК; На изображениях в списке предметов есть параллакс при прокрутке. Это визуально показано на следующем изображении:
Однако я столкнулся с проблемой контекста данных, связанной с данными. Все примеры, которые я видел, являются фоном всего параллакса GridView
или ListView
. Рабочий пример этого выглядит следующим образом (очень похоже на пример галереи элементов управления XAML здесь ):
<Grid>
<ParallaxView Name="GridViewParallaxView"
Source="{x:Bind MyGridView}"
VerticalShift="100">
<!-- This is the background image that parallaxes. -->
<Image></Image>
</ParallaxView>
<GridView Name="MyGridView">
<!-- GridView Content Here... -->
</GridView>
</Grid>
Проблема, с которой я сталкиваюсь, заключается в попытке поместить ParallaxView
ВНУТРИ DataTemplate
в ItemTemplate
в GridView
.
<GridView Name="MyGridView"
ItemsSource="{x:Bind MyDataList}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="models:MyDataType">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<ParallaxView Name="GridViewParallaxView"
Grid.Row="0"
Source="{x:Bind MyGridView}"
VerticalShift="100">
<!-- This is the image ON EACH GRIDVIEW ITEM that parallaxes. -->
<Image Source="{x:Bind MySource}"></Image>
</ParallaxView>
<TextBlock Name="ItemTitleTextBlock"
Grid.Row="1"
Text="{x:Bind Title}"></TextBlock>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
Обратите внимание, что некоторые свойства (например, MinWidth
и Margin
) были опущены для краткости.
Код (не полностью релевантный, но для добавления контекста к некоторым привязкам):
public class MyPage : Page
{
public ObservableCollection<MyDataType> MyDataList { get; set; }
}
public class MyDataType
{
public string Title { get; set; }
public ImageSource MySource { get; set; }
}
Это не работает, потому что размещение ParallaxView внутри DataTemplate меняет DataContext. MyGridView
больше не может быть привязан непосредственно к этому. Так как мне это связать?
Также я прочитал, что свойство DataContext
наследуется дочерними элементами в дереве XAML. Мне нужно, чтобы привязка данных Image
была в том же контексте, что и DataTemplate
. Есть ли способ просто изменить DataContext
на ParallaxView
?