2017-04-03 21 views
1
<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> 

リストビュー項目の最初の項目にフォーカスまたは選択を設定する必要があります。リストビューには項目の配列が含まれています。開始時に最初の項目をフォーカスし、最後に選択した項目を保持する必要があります。xaml UWPが最初のリストビュー項目にフォーカス/選択を設定しました

答えて

2

ここでは、コーディングスタイルによって複数のオプションがあります。私たちのイベントハンドラーからのコードとYourCollectionプロパティを持つビューモデルクラスへのバインディングを使用しているようですので、両方の例を示します。

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    if (MyListView.Items.Count > 0) 
     MyListView.SelectedIndex = 0; 
} 

<Page Loaded="Page_Loaded"> 
    ... 
    <ListView Name="MyListView" ItemsSource="{Binding YourCollection}"> 
    ... 
    </ListView> 

は、その後、次のコードをあなたのPAGE_LOADEDハンドラを追加します。Loadedイベントを処理して、リストビューに名前を付けるために、あなたのXAMLファイルを更新し、コードビハインド

を使用して:)

ビューモデルの使用

(あなたがYourCollectionを定義している場所)

あなたのビューモデルにSelectedItemプロパティを提供します。最後

<ListView Name="MyListView" ItemsSource="{Binding YourCollection}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"> 

:あなたのItemsSourceに行ったよう

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

はその後、選択した項目にあなたのListViewコントロールをバインドコレクションアイテムを読み込んだら、SelectedItemを設定してください。

このメソッドには、SelectionChangedイベントとItemClickイベントを置き換えるメリットがあります。このような状況では、コントロールによってSelectedItemがデフォルトで変更されるため、これらは必要ありません。

0

ViewModelでPage_LoadedハンドラとプロパティSelectedItemを必要としない解決策が見つかりました。

<ListView Name="yourCollectionListView" 
      ItemsSource="{Binding YourCollection}" 
      SelectedItem="{Binding RelativeSource={RelativeSource Self}, Path=ItemSource[0]}"/> 

もちろん、リストには少なくとも1つのアイテムがあることを確認してください。 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> 

EDIT

SelectedItemプロパティに次結合することによって、これを達成することも可能である:

SelectedItem="{Binding Path=[0]}"  
関連する問題