我有一个翻转视图,我希望它每秒自动更改图像,n
而不给用户单击右或左的选项。
问问题
3330 次
1 回答
8
使用DispatcherTimer控制更改图像的时间间隔,并在FlipView上设置SelectedIndex属性(按名称 - 如果您使用 MVVM,则在视图模型上设置绑定到 SelectedIndex 的属性)。
编辑
这是一个使用文本块而不是图像的示例(项目中的内容与FlipView
执行操作无关)。
主页.xaml
<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" FontSize="50" FontWeight="Bold">
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition />
</Grid.RowDefinitions>
<!-- Stick in a place to show what our interval between changing content is -->
<TextBlock x:Name="TimeDelta" Text="Waiting for first change..."/>
<FlipView x:Name="TheFlipView" SelectionChanged="DisplayedItemChanged" Grid.Row="1">
<!-- Statically add some items -->
<FlipView.Items>
<FlipViewItem>
<TextBlock Text="Item1" />
</FlipViewItem>
<FlipViewItem>
<TextBlock Text="Item2" />
</FlipViewItem>
<FlipViewItem>
<TextBlock Text="Item3" />
</FlipViewItem>
</FlipView.Items>
</FlipView>
</Grid>
</Page>
MainPage.xaml.cs
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace App1
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage
{
//Make a place to store the timer
private readonly DispatcherTimer _timer;
//Make a place to store the last time the displayed item was set
private DateTime _lastChange;
public MainPage()
{
InitializeComponent();
//Configure the timer
_timer = new DispatcherTimer
{
//Set the interval between ticks (in this case 2 seconds to see it working)
Interval = TimeSpan.FromSeconds(2)
};
//Change what's displayed when the timer ticks
_timer.Tick += ChangeImage;
//Start the timer
_timer.Start();
}
/// <summary>
/// Changes the image when the timer ticks
/// </summary>
/// <param name="sender"></param>
/// <param name="o"></param>
private void ChangeImage(object sender, object o)
{
//Get the number of items in the flip view
var totalItems = TheFlipView.Items.Count;
//Figure out the new item's index (the current index plus one, if the next item would be out of range, go back to zero)
var newItemIndex = (TheFlipView.SelectedIndex + 1) % totalItems;
//Set the displayed item's index on the flip view
TheFlipView.SelectedIndex = newItemIndex;
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached. The Parameter
/// property is typically used to configure the page.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
/// <summary>
/// When the user changes the item displayed manually, reset the timer so we don't advance at the remainder of the last interval
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DisplayedItemChanged(object sender, SelectionChangedEventArgs e)
{
//Show the time deltas...
var currentTime = DateTime.Now;
if (_lastChange != default(DateTime))
{
TimeDelta.Text = (currentTime - _lastChange).ToString();
}
_lastChange = currentTime;
//Since the page is configured before the timer is, check to make sure that we've actually got a timer
if (!ReferenceEquals(_timer, null))
{
_timer.Stop();
_timer.Start();
}
}
}
}
于 2013-01-05T22:40:46.923 回答