Похоже, это будет распространенной проблемой ...
Я использую MVVM Light
У меня есть список, определенный в моем xaml
<ListBox ItemsSource="{Binding Events}" SelectedItem="{Binding SelectedEvent, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<cmd:EventToCommand Command="{Binding EventPageCommand, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListBox.ItemTemplate>
<DataTemplate>
<Border Padding="0,0,0,22">
<StackPanel>
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Preview}" TextWrapping="Wrap"/>
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Это работает отлично и прекрасно, за исключением того, что пользователь может щелкнуть ниже этого списка, и событие все еще вызывается.
Я могу изменить его для использования SelectionChanged
, например:
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding EventPageCommand, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Но тогда, если я использую кнопку «Назад», я не могу выбрать один и тот же элемент дважды, поскольку выбор фактически не изменился.Я мог бы, вероятно, зайти в свой код и установить выбранный индекс = -1 при загрузке страницы, но это выглядит как взлом, и я использую списки в довольно многих местах, и мне не хотелось бы помнить, чтобы делать этот взлом везде.
Есть идеи?
edit
Я добавил цвет фона для своего списка и своих элементов списка, и пока мои элементы списка занимают только то место, которое занимает текстокно списка занимает весь экран, расширяясь ниже последнего элемента списка.Возможно, одним из способов было бы зарезервировать это дополнительное пространство.
update
, что до сих пор кажется наилучшим, - это установить VerticalAlignmnet="Top"
в списке (это увеличиваетдополнительное место внизу, не знаю почему, но тогда прокрутка заканчивается внизу списка, а не внизу экрана).Затем я отключил прокрутку на самом списке ScrollViewer.VerticalScrollBarVisibility="Disabled"
и обернул все это в <ScrollViewer>