我有winRT(Win phone 8.1)的程序应用程序,我使用FlipView控件如下:
<FlipView x:Name="flvMain" Margin="0,0,0,0" Background="Transparent" SelectedIndex="1" SelectionChanged="flvMain_SelectionChanged" Tapped="flvMain_Tap">
<!-- Flip View Item 1 -->
<Grid x:Name="grdOption" >
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition Height="50"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.Background>
<ImageBrush Stretch="Fill" ImageSource="Assets/test1.png"/>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Image x:Name="imgAvatar" Grid.Column="0" Margin="10,15" Source="Assets/Logo.png"/>
<Grid Grid.Column="1" Margin="0,15">
<TextBlock x:Name="txbNameAlias" Margin="0,5,0,54" FontSize="22" FontWeight="Bold" SelectionHighlightColor="{x:Null}" Foreground="White" RequestedTheme="Light">Name</TextBlock>
<TextBlock x:Name="txbAccountId" Margin="0,36,0,0" FontSize="16" RequestedTheme="Light" Foreground="White" Height="20" VerticalAlignment="Top">55556666</TextBlock>
<TextBlock x:Name="txbAmount" Margin="0,61,0,0" FontSize="18" FontWeight="Bold" RequestedTheme="Light" Foreground="#FFFFFEFE">555555</TextBlock>
</Grid>
<Button x:Name="btnBackToMain" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinHeight="50" MinWidth="40" Margin="5,30" BorderBrush="Transparent" RenderTransformOrigin="0.54,-0.035" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Click="btnBackToMain_Click">
<Button.Background>
<ImageBrush Stretch="Fill" ImageSource="Assets/icon-back-mainpage.png"/>
</Button.Background>
</Button>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" BorderThickness="0" RequestedTheme="Light" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FF0C75C9" Margin="0,-10,0,-10" MinHeight="58" Content="Btn 1" ScrollViewer.VerticalScrollBarVisibility="Disabled" Foreground="#FFFFFEFE" FontSize="18" FontFamily="Global User Interface" />
<Button Grid.Column="1" BorderThickness="0" RequestedTheme="Light" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FF308D1E" Margin="0,-10" MinHeight="58" ScrollViewer.VerticalScrollBarVisibility="Disabled" FontFamily="Global User Interface" FontSize="18" Content="btn 2" Foreground="White"/>
</Grid>
<Grid Grid.Row="2">
<ListView x:Name="lvFunctionOption" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemClick="lvFunction_ItemClick" IsItemClickEnabled="True">
<!-- some code here -->
</ListView>
<Grid x:Name="grdSubListFunction" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView Grid.Column="1" x:Name="lvSubFunctions" Background="#00D53636" Margin="0" Visibility="Collapsed" RequestedTheme="Light" IsItemClickEnabled="True" HorizontalAlignment="Stretch" VerticalAlignment="Top" ItemClick="lvSubFunctions_ItemClick">
<!-- some code here -->
</ListView>
</Grid>
</Grid>
</Grid>
<!-- Flip View Item 2 -->
<Grid x:Name="grdMain" Height="640" Margin="0,0,0,0" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Background="#FF0C75C9">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Image x:Name="btnToListFunction" Grid.Column="0" Source="Assets/icon-menu.png" Margin="7" Tapped="btnToListFunction_Tap"></Image>
</Grid>
<ScrollViewer Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Top">
<StackPanel Background="White">
<!-- some code here -->
</StackPanel>
</ScrollViewer>
</Grid>
</FlipView>
在 XAML 中.cs文件中我有代码
protected override void OnNavigatedTo(NavigationEventArgs e)
{
flvMain.SelectedIndex = 1;
}
它运行正常,但是当我单击btnBackToMain并点击btnToListFunction时,我有代码:
private void btnBackToMain_Click(object sender, RoutedEventArgs e)
{
flvMain.SelectedIndex = 1;
}
private void btnToListFunction_Tap(object sender, TappedRoutedEventArgs e)
{
flvMain.SelectedIndex = 0;
}
FlipView 无法将项目更改为特殊索引。当我通过选择更改事件调试单击事件时
private void flvMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (flvMain != null)
{
CustomTool.Log(this, "current index: " + flvMain.SelectedIndex);
}
else
{
CustomTool.Log(this, "NULLL");
}
}
我有点击 btnToListFunction 的结果:
Log: MainPage >> current index: 0
Log: MainPage >> current index: 1
并单击 btn返回主页
Log: MainPage >> current index: 1
Log: MainPage >> current index: 0
但是当我向右滑动(同样点击btnBackToMain)时,我得到的结果:
Log: MainPage >> current index: 1
并向左滑动(同样单击 btnToListFunction ) 我有结果:
Log: MainPage >> current index: 0
请帮我解决吗?我不知道为什么翻转视图的选定索引可以在更改(通过单击)后回滚。感谢大家的支持!
我有一个类似的问题,不同之处在于我的按钮是AppBarButton。如果您使用鼠标单击按钮,它将正常工作;因此,我猜问题是由操纵启动的某些事件引起的。我通过声明来解决这个问题
ManipulationMode="None"
对于翻转视图中的按钮。
因此,您可以通过将ManipulationMode="None"
嵌入到 XAML 中的 btnBackToMain 和btnToListFunction 元素中来解决此问题。
希望此解决方案对您有所帮助。
[2015-08-18] 已添加
如果不想将"操作"设置为"无"以忽略按钮上的所有操作,则可以尝试在将flvMain.SelectedIndex
设置为所需数字之前设置flvMain.SelectedIndex = -1;
。例如
private void btnBackToMain_Click(object sender, RoutedEventArgs e)
{
flvMain.SelectedIndex = -1;
flvMain.SelectedIndex = 1;
}
private void btnToListFunction_Tap(object sender, TappedRoutedEventArgs e)
{
flvMain.SelectedIndex = -1;
flvMain.SelectedIndex = 0;
}
因为问题仅在原始索引成功时发生,并且 -1 可用于 SelectedIndex 而不选择任何内容。
为什么FlipView的行为是这样的?我不知道。也许当人们把手指放在它上面时,它可以避免不稳定的行为。^_^