<ListView x:Name="listview" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.ZoomMode="Enabled"
ItemsSource="{Binding YourCollection}" DoubleTapped="listview_DoubleTapped" Tapped="listview_Tapped" SelectionChanged="listview_SelectionChanged"
GotFocus ="StackPanel_GotFocus" IsItemClickEnabled="True" ItemClick="ListView_ItemClick"
Margin="162,539,-103,11" Style="{StaticResource ListViewStyle1}" ScrollViewer.VerticalScrollBarVisibility="Disabled" Grid.RowSpan="2">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Height="130" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate >
<DataTemplate>
<StackPanel Orientation="Vertical" Height="130" Width="192" >
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Image}" Height="108" Width="192" HorizontalAlignment="Center" VerticalAlignment="Center" />
</StackPanel>
<StackPanel Orientation="Vertical" >
<TextBlock Text="{Binding Name}" TextAlignment="Center" Height="22" Width="192" Foreground="White" FontFamily="Assets/GothamLight.ttf#GothamLight"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
需要将焦点或选择设置为listview项目的第一项。列表视图包含一系列项目,其中焦点需要在开始时定位第一项,然后保留最后选择的项目。
答案 0 :(得分:1)
根据您的编码风格,这里有多种选择。看起来您正在使用我们的事件处理程序中的代码并使用YourCollection属性绑定到视图模型类,因此我将为您提供这两个示例。 :)
使用代码隐藏
更新您的XAML文件以处理Loaded事件并命名您的ListView:
<Page Loaded="Page_Loaded">
...
<ListView Name="MyListView" ItemsSource="{Binding YourCollection}">
...
</ListView>
然后将以下代码添加到Page_Loaded处理程序:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
if (MyListView.Items.Count > 0)
MyListView.SelectedIndex = 0;
}
使用视图模型
在视图模型中提供SelectedItem属性(无论您在何处定义YourCollection):
private YourItem_selectedItem = null;
public Dumb SelectedItem
{
get { return _selectedItem; }
set { SetProperty<YourItem>(ref _selectedItem, value); }
}
然后将ListView绑定到所选项目,就像使用ItemsSource一样:
<ListView Name="MyListView" ItemsSource="{Binding YourCollection}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
最后,只需在加载收藏品后设置您的SelectedItem。
此方法还具有替换SelectionChanged和ItemClick事件的好处。您不会需要它们,因为在这些情况下,控件默认会更改SelectedItem。
答案 1 :(得分:0)
我找到了另一个解决方案,它不需要Page_Loaded处理程序,也不需要ViewModel中的属性SelectedItem。
<ListView Name="yourCollectionListView"
ItemsSource="{Binding YourCollection}"
SelectedItem="{Binding RelativeSource={RelativeSource Self}, Path=ItemSource[0]}"/>
当然,您应确保该列表至少包含一个项目。使用VisualState.StateTriggers,如果ListView为空,则可以隐藏它。
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState.StateTriggers>
<StateTrigger IsActive="{Binding YourCollection.Count, Converter={StaticResource EqualToParam}, ConverterParameter={StaticResource Zero}}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="yourCollectionListView.Visibility" Value="Collapsed" />
</VisualState.Setters>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
在页面资源中定义零值:
<x:Int32 x:Key="Zero">0</x:Int32>
修改强>
甚至可以通过将以下内容绑定到SelectedItem属性来实现此目的:
SelectedItem="{Binding Path=[0]}"