以编程方式翻阅Metro FlipView

时间:2012-08-23 09:41:26

标签: c# xaml microsoft-metro windows-runtime

我想让FlipView在计时器上旋转其项目。计时器很简单,但有没有办法让FlipView在代码中显示下一个项目(然后循环)?

此问题Why does FlipView ignore SelectedItem中的答案似乎不起作用。

5 个答案:

答案 0 :(得分:2)

只需跳过SelectedItem属性并使用SelectedIndex。将其设置为0以开始并将其增加1,直到达到相当于列表中项目数减1的值,然后返回到零。我刚刚对此进行了测试,它适用于在XAML中声明或绑定到ItemsSource属性的flipview项目。

答案 1 :(得分:2)

如果您通知UI该属性已更改,则它将起作用。您的ViewModel必须实现INotifyPropertyChanged,并且该属性需要触发PropertyChanged事件

public class ViewModel : INotifyPropertyChanged
{
    private object _selectedItem;

    public object SelectedItem
    {
        get { return _selectedItem; }
        set 
        { 
            _selectedItem = value; 
            OnPropertyChanged("SelectedItem"); 
        }
    }
}

您还可以使用示例应用随附的BindableBase类

public class ViewModel : BindableBase
{
    private object _selectedItem;

    public object SelectedItem
    {
        get { return this._selectedItem; }
        set { this.SetProperty(ref this._selectedItem, value); }
    }
}

答案 2 :(得分:2)

这在某些情况下可能会有所帮助

flipView.SelectedIndex = -1;
flipView.SelectedIndex = desiredIndex;

OR

flipView.SelectedItem = null;
flipView.SelectedItem = flipViewItem;

答案 3 :(得分:0)

出于某种原因,我需要为这些FlipViews设置SelectedIndex和SelectedItem。奇怪的行为:/(也许这是从RP到RTM的变化 - 我在RTM上。)

答案 4 :(得分:0)

在Windows 10 VS2017中 对于以下XML代码:

<FlipView Grid.Row="1" x:Name="fvMainControls">
    <FlipViewItem>
        <CheckBox Content="My Overlay" Height="21" Canvas.Left="191" Canvas.Top="164" Width="131"/>
    </FlipViewItem>
    <FlipViewItem>
        <Rectangle HorizontalAlignment="Left" Height="387" Margin="54,140,0,0" Stroke="Black" VerticalAlignment="Top" Width="206" Fill="#FF6A1717" FocusVisualPrimaryBrush="#FFA46767"/>
    </FlipViewItem>
</FlipView>

这有效:

fvMainControls.SelectedIndex = 0          
fvMainControls.SelectedIndex = 1

fvMainControls.SelectedItem = fvMainControls.Items(0)
fvMainControls.SelectedIndex = fvMainControls.Items(1)

的工作原理。拉维