2017-04-03 67 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> 

需要將焦點或選擇設置爲listview項目的第一個項目。列表視圖包含項目,其中,重點需要啓動期間被定位第一項目和然後保留最後選擇的項目的陣列。xaml UWP將焦點/選擇設置爲第一個列表視圖項目

回答

2

有多種選擇這裏取決於你的編碼風格。它看起來像你使用後面的代碼從我們的事件處理程序,並結合與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和項目單擊事件的好處。您將不需要它們,因爲在這些情況下,控件會默認更改SelectedItem。

0

我發現了一個進一步的解決方案,不需要PAGE_LOADED處理也不在視圖模型屬性的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]}"  
相關問題