在项目模板列表视图视觉状态管理器(WinRT中,麦德龙,XAML)(listview visual

2019-07-30 07:11发布

我试图让一个列表视图显示由的TextBlocks的项目清单...点击ListView的项目时,我想,而不是显示由文本框列表...

下面是我想出了,这是行不通的。 我有模板内的两个网格,并希望能简单地显示并根据若选择列表视图项上隐藏网格。 我在哪里出了错?

我撕开这些可视状态从ListView的模板本身,但我必须承认林不知道他们是如何工作的,或者他们是怎样来触发。 如果有一些代码背后做到这一点?

    <ListView Grid.Row="2" ItemsSource="{Binding Lines}" HorizontalAlignment="Stretch">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid Name="Readonly">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="3*"/>
                        </Grid.ColumnDefinitions>

                        <TextBlock Text="{Binding One}" Grid.Column="0"/>
                        <TextBlock Text="{Binding Two}" Grid.Column="1"/>
                    </Grid>
                    <Grid Name="Editing" Visibility="Collapsed">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="3*"/>                            
                        </Grid.ColumnDefinitions>

                        <TextBox Text="{Binding One}" Grid.Column="0"/>
                        <TextBox Text="{Binding Two}" Grid.Column="1"/>
                    </Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Editing" Storyboard.TargetProperty="Visibility">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Readonly" Storyboard.TargetProperty="Visibility">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

非常感谢,钢钣

Answer 1:

您最多设置动画故事板正在呈现的项目之外。 您指定的目标是只出不外页面的范围,但他们可能还不存在。 其结果是,当页面呈现的故事板不能设置。

这里有你想要做什么。

创建用户控件,将代表你想要的布局ListView项目。 当你定义ListView ,一定要包括你的UserControlDataTemplate ,像这样的:

<ListView>
        <ListView.ItemTemplate>
            <DataTemplate>
                <local:MyUserControl />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView.ItemsPanel>
</ListView>

现在,对于VisualStates 。 您需要设置状态了内部UserControl 。 这意味着用于编辑的状态和查看的状态。 一个国家需要本地化这样。 想想的Button控制。 在按钮状态都在每个定义的Button而不是一些共享位置。

当你准备好改变的项目之一的状态,你需要将其连接到后面的代码。 在后面的代码,你在通过项目需要循环ListView和叫你创建一个方法,像MakeStateEdit()MakeStateView() 这将是你的,设置用户控件的状态的方法实施。 外面的代码只是相信它发生。

这意味着你需要调用VisualStateManager.GoToState(this, "Edit", true); (或任何状态下创建)的内部UserControl ,在代码隐藏。 相反,当你可以设置“查看”状态MakeStateView()被调用。

要迭代的ListView Items属性,你需要使用的技术,像这样( http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html )。 你会发现,一旦你开始沿着这条道路,它确实不是很复杂。 你可能会失望,你不能做到这一切的XAML。 你不能。 但这是可以完成的!

祝您好运!



Answer 2:

我不知道,如果视觉状态变化传播,所以也许你的解决方案应该以某种方式工作,但我会在ListViewItem的模板,而不是(通过ItemContainerStyle)编辑可视状态。



文章来源: listview visual state manager in item template (WinRT, Metro, XAML)