C# xaml UWP将焦点/选择设置为第一个listview项

C# xaml UWP将焦点/选择设置为第一个listview项,c#,xaml,uwp,C#,Xaml,Uwp,需要将焦点或选择设置为listview项的第一项。listview包含一个项目数组,在该数组中,焦点需要在开始时以第一个项目为目标,然后保留最后选择的项目。根据您的编码风格,这里有多个选项。看起来您正在使用事件处理程序中的代码隐藏,并使用YourCollection属性绑定到视图模型类,因此我将给出这两个示例:) 使用代码隐藏 更新XAML文件以处理加载的事件,并将ListView命名为: <ListView x:Name="listview" ScrollViewer.Horizont

需要将焦点或选择设置为listview项的第一项。listview包含一个项目数组,在该数组中,焦点需要在开始时以第一个项目为目标,然后保留最后选择的项目。

根据您的编码风格,这里有多个选项。看起来您正在使用事件处理程序中的代码隐藏,并使用YourCollection属性绑定到视图模型类,因此我将给出这两个示例:)

使用代码隐藏

更新XAML文件以处理加载的事件,并将ListView命名为:

 <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>
使用视图模型

在视图模型中提供SelectedItem属性(无论在何处定义集合):

private YourItem\u selectedItem=null;
公共选择项
{
获取{return\u selectedItem;}
set{SetProperty(ref _selectedItem,value);}
}
然后将ListView绑定到所选项目,就像您对项目资源所做的那样:

private YourItem_selectedItem = null;
public Dumb SelectedItem
{
    get { return _selectedItem; }
    set { SetProperty<YourItem>(ref _selectedItem, value); }
}

最后,只需在加载收藏项目后设置SelectedItem


此方法还可以替换SelectionChanged和ItemClick事件。您不需要它们,因为在这些情况下,默认情况下控件会更改SelectedItem。

我找到了一个进一步的解决方案,它不需要加载页面的处理程序,也不需要ViewModel中的SelectedItem属性

<ListView Name="MyListView" ItemsSource="{Binding YourCollection}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
private YourItem_selectedItem = null;
public Dumb SelectedItem
{
    get { return _selectedItem; }
    set { SetProperty<YourItem>(ref _selectedItem, value); }
}
<ListView Name="MyListView" ItemsSource="{Binding YourCollection}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
<ListView Name="yourCollectionListView"
          ItemsSource="{Binding YourCollection}"
          SelectedItem="{Binding RelativeSource={RelativeSource Self}, Path=ItemSource[0]}"/>
<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="{Binding Path=[0]}"