我正在尝试获取一个列表视图来显示由文本块组成的项目列表......
当单击列表视图项目时,我想显示一个由文本框组成的列表......
以下是我想出来的,它不起作用。
我在模板中有两个网格,希望根据是否选择列表视图项来简单地显示和隐藏网格。我哪里出错了?
我从列表视图的模板本身中删除了这些视觉状态,但我必须承认我不确定它们是如何工作的,或者它们是如何被触发的。是否应该有一些代码来执行此操作?
<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>
非常感谢,
科汉
您正在渲染的项目之外设置故事板动画。您指定的目标不仅超出了外部页面的范围,而且它们可能还不存在。因此,渲染页面时无法设置 Storyboard。
这就是您想要做的。
创建一个用户控件来表示您想要的布局ListView
物品。当你定义你的ListView
,请务必包括您的UserControl
在你的DataTemplate
, 像这样:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<local:MyUserControl />
</DataTemplate>
</ListView.ItemTemplate>
</ListView.ItemsPanel>
</ListView>
现在,对于VisualStates
。您需要在里面设置状态UserControl
。这意味着编辑状态和查看状态。一个国家需要像这样本地化。想想Button
控制。按钮中的状态在每个中定义Button
不是某个共享位置。
当您准备更改其中一项的状态时,需要将其连接到后面的代码。在后面的代码中,您需要循环遍历您的项目中的项目ListView
并调用您创建的方法,例如MakeStateEdit()
and MakeStateView()
。这些方法的实现将设置用户控件的状态。外部代码只是相信它会发生。
这意味着您需要致电VisualStateManager.GoToState(this, "Edit", true);
(或您创建的任何状态)在您的内部UserControl
,在代码隐藏中。相反,您可以在以下情况下设置“查看”状态:MakeStateView()
叫做。
迭代一个ListView
Items
属性,你需要使用这样的技术(http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html)。你会发现,一旦你开始走这条路,它实际上并不是很复杂。您可能会对无法在 XAML 中完成所有这些操作感到失望。你不能。但这是可以完成的!
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)