После прочтения Статья Шона, предложенная @Depechie. Я попытался реализовать то же решение в своем приложении, чтобы обновить содержимое AppBar с помощью кнопок, специфичных для раздела.
Несмотря на мои усилия, мне не удалось заставить его работать, поэтому я изменил некоторые части решения. Я использовал решение поведения и изменил только функцию ScrollerOnViewChanged
следующим образом. Это может быть не лучший способ или может привести к неожиданным результатам в разных сценариях, но в моем случае это сработало без проблем.
private void ScrollerOnViewChanged(object sender, ScrollViewerViewChangedEventArgs scrollViewerViewChangedEventArgs)
{
_settingIndex = true;
ScrollViewer scrollViewer = sender as ScrollViewer;
if (scrollViewer.HorizontalOffset > (scrollViewer.ViewportWidth / 2))
SelectedIndex = 1;
else
SelectedIndex = 0;
_settingIndex = false;
}
После этого я добавил свойство в свою модель представления, чтобы сохранить выбранный индекс.
private int _selectedIndex;
public int SelectedIndex
{
get { return _selectedIndex; }
set
{
SetProperty(ref this._selectedIndex, value);
}
}
Я использовал поведение в XAML, чтобы обновить SelectedIndex в моей ViewModel.
<Hub>
<i:Interaction.Behaviors>
<behaviors:HubSelectionBehavior SelectedIndex="{Binding SelectedIndex, Mode=TwoWay}" />
</i:Interaction.Behaviors>
<HubSection>...</HubSection>
<HubSection>...</HubSection>
</Hub>
Последнее, что нужно сделать, это установить видимость AppBarButtons с помощью этого свойства. SectionIndexToVisibilityConverter сравнивает SelectedIndex с ConverterParameter и возвращает Visibility.Visible
, если они равны.
<CommandBar>
<AppBarButton Label="Open" Icon="World" Command="{Binding OpenInBrowserCommand}" Visibility="{Binding SelectedIndex, Converter={StaticResource SectionIndexToVisibilityConverter}, ConverterParameter=0}"/>
<AppBarButton Label="Previous" Icon="Back" Command="{Binding PreviousAnswerCommand}" Visibility="{Binding SelectedIndex, Converter={StaticResource SectionIndexToVisibilityConverter}, ConverterParameter=1}"/>
<AppBarButton Label="Next" Icon="Forward" Command="{Binding NextAnswerCommand}" Visibility="{Binding SelectedIndex, Converter={StaticResource SectionIndexToVisibilityConverter}, ConverterParameter=1}"/>
</CommandBar>
Спасибо @Depechie за предложение статьи и @Shawn за написание статьи :)
person
Birkan Cilingir
schedule
05.02.2015
HorizontalOffset
изScrollViewer
, чтобы решить, находится ли он в первом разделе или во втором. Спасибо за ссылку. - person Birkan Cilingir   schedule 23.01.2015