gpt4 book ai didi

c# - FlipView.SelectedIndex 鼠标模式与基本触摸模式

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:22 27 4
gpt4 key购买 nike

我的页面上有一个数据绑定(bind) FlipView,效果很好。我的页面上有 2 个按钮,我想用它们来向前和向后导航 FlipView。当我在模拟器中使用 Mouse Mode 或在 Local Machine 模式下实际使用我的鼠标时,这些按钮起作用。

但是,当我使用“基本触摸模式”或在实际触摸屏上使用我的应用程序并点击按钮时,FlipView 会导航到下一个 View ,但随后会闪烁/翻转回来。

这是我的 FlipView:

<FlipView x:Name="Flipper" ItemsSource="{Binding Path=Views}">...</FlipView>

还有我的按钮:

<Button x:Name="ForwardButton" IsEnabled="{Binding CanGoForward}" Style="{StaticResource ForwardButtonStyle}" Tapped="ForwardButton_OnTapped" />

还有我的事件:

private void ForwardButton_OnTapped(object sender, TappedRoutedEventArgs e)
{
if (Flipper.SelectedIndex >= Flipper.Items.Count - 1)
{
Flipper.SelectedIndex = 0;
}
else
{
Flipper.SelectedIndex++;
}

e.Handled = true;
}

更新:

OnSelectionChanged 添加到 FlipView,我看到它在 Basic touch mode 中点击了两次,但在 Mouse mode 中只点击了一次,又一次鼠标模式 按预期工作。

最佳答案

是的,所以我是这样实现的:

public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}

ViewModel ViewModel { get { return this.DataContext as ViewModel; } }

private void Button_Click_1(object sender, RoutedEventArgs e)
{
this.ViewModel.MovePrevious();
}

private void Button_Click_2(object sender, RoutedEventArgs e)
{
this.ViewModel.MoveNext();
}
}

public class ViewModel : INotifyPropertyChanged
{
public ViewModel() { SelectedThing = ThingList.First(); }

List<int> m_ThingList = Enumerable.Range(1, 50).ToList();
public List<int> ThingList { get { return m_ThingList; } set { SetProperty(ref m_ThingList, value); } }

int m_SelectedThing = default(int);
public int SelectedThing { get { return m_SelectedThing; } set { SetProperty(ref m_SelectedThing, value); } }

internal void MovePrevious()
{
var _CurrentIndex = ThingList.IndexOf(this.SelectedThing);
try { SelectedThing = ThingList[--_CurrentIndex]; }
catch { SelectedThing = ThingList.First(); }
}

internal void MoveNext()
{
var _CurrentIndex = ThingList.IndexOf(this.SelectedThing);
try { SelectedThing = ThingList[++_CurrentIndex]; }
catch { SelectedThing = ThingList.Last(); }
}

public event PropertyChangedEventHandler PropertyChanged;
void SetProperty<T>(ref T storage, T value, [System.Runtime.CompilerServices.CallerMemberName] String propertyName = null)
{
if (!object.Equals(storage, value))
{
storage = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}

<Page.DataContext>
<local:ViewModel />
</Page.DataContext>

<Page.BottomAppBar>
<AppBar>
<Grid>
<Button HorizontalAlignment="Left" Click="Button_Click_1">Previous</Button>
<Button HorizontalAlignment="Right" Click="Button_Click_2">Next</Button>
</Grid>
</AppBar>
</Page.BottomAppBar>

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<FlipView x:Name="MyFlip"
ItemsSource="{Binding ThingList}"
SelectedItem="{Binding SelectedThing,
Mode=TwoWay}" />
</Grid>

嗯,它工作正常。你能仔细检查一下吗?或者提供更多信息?否则,也许使用我的指南更新您的实现可以为您解决这个问题。我希望如此。

实际上,我会使用 DelegateCommand 来处理按钮。但是我不想用太多的样板代码来过度使用这个例子。如果你想看看我会做什么,你可以看这里:http://blog.jerrynixon.com/2012/08/most-people-are-doing-mvvm-all-wrong.html

关于c# - FlipView.SelectedIndex 鼠标模式与基本触摸模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208984/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com