项目模板中的listview可视状态管理器(WinRT、Metro、XAML)
我正在尝试获取一个列表视图,以显示由文本块组成的项目列表。。。 单击listview项时,我希望显示由文本框组成的列表 下面是我想出的,它不起作用。 我在模板中有两个网格,希望根据是否选中listview项来显示和隐藏网格。我哪里出错了 我将这些视觉状态从listview的模板中删除,但我必须承认我不确定它们是如何工作的,或者它们是如何被触发的。是否应该有一些代码来执行此操作项目模板中的listview可视状态管理器(WinRT、Metro、XAML),xaml,windows-runtime,windows-store-apps,winrt-xaml,Xaml,Windows Runtime,Windows Store Apps,Winrt Xaml,我正在尝试获取一个列表视图,以显示由文本块组成的项目列表。。。 单击listview项时,我希望显示由文本框组成的列表 下面是我想出的,它不起作用。 我在模板中有两个网格,希望根据是否选中listview项来显示和隐藏网格。我哪里出错了 我将这些视觉状态从listview的模板中删除,但我必须承认我不确定它们是如何工作的,或者它们是如何被触发的。是否应该有一些代码来执行此操作 <ListView Grid.Row="2" ItemsSource="{Binding Lines}"
<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>
非常感谢,,
Kohan我不知道视觉状态更改是否会传播,因此您的解决方案可能会以某种方式起作用,但我会在ListViewItem模板中编辑视觉状态(通过ItemContainerStyle)。您正在渲染的项目外部设置情节提要动画。您指定的目标不仅不在外部页面的范围内,而且可能还不存在。因此,在呈现页面时无法设置情节提要 这是你想要做的 创建一个用户控件,该控件将表示您希望在
列表视图
项中使用的布局。定义列表视图
时,请确保在数据模板
中包含用户控件
,如下所示:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<local:MyUserControl />
</DataTemplate>
</ListView.ItemTemplate>
</ListView.ItemsPanel>
</ListView>
现在,对于VisualStates
。您需要在UserControl
中设置状态。这意味着编辑状态和查看状态。一个状态需要像这样进行本地化。想象一下按钮
控件。按钮中的状态在每个按钮中定义,而不是在某个共享位置
当您准备更改其中一项的状态时,需要将其连接到代码隐藏。在代码隐藏中,您需要循环查看列表视图中的项,并调用您创建的方法,例如MakeStateEdit()
和MakeStateView()
。这些方法的实现将设置用户控件的状态。外部代码只是相信它会发生
这意味着您需要调用VisualStateManager.GoToState(这个“编辑”,true)代码>(或您创建的任何状态)位于UserControl
中的代码隐藏中。相反,您可以在调用MakeStateView()
时设置“视图”状态
要迭代列表视图
项
属性,您需要使用如下技术()。你会发现,一旦你开始走这条路,其实并不复杂。您可能会感到失望,因为无法在XAML中完成所有这些。你不能。但这是可以做到的
祝你好运 通过在blend中提取listviewitem模板并使用其中的状态,我成功地使其工作。但这似乎有点过分了。我目前正在考虑使用ItemTemplateSelector,希望它能让我动态选择模板。不,选择器不允许你动态选择,对不起,你能解释一下你是如何让它工作的吗?我正在编辑ItemContainerStyle,在那里我可以找到VisualStates,然后我引用模板的网格,例如在您的示例“编辑”中,但我收到一个错误,说找不到它:\