我正在构建一个Windows Phone 7应用程序。对于它,我正在制作一个ListBox
,它有两种模式:编辑和不编辑。当它处于编辑模式时,项目旁边会显示+
和-
图标。当它处于正常模式时,图标将被隐藏。
我正在试图弄清楚如何做到这一点。这是控件:
<Grid x:Name="LayoutRoot">
<ListBox x:Name="ContentListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="{Binding Path=IconSource}"
Grid.Column="0"
Width="96"
Height="96"
VerticalAlignment="Center" />
<TextBlock Text="{Binding Path=Name}" Grid.Column="1" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
理想情况下,我想设置第一列图标的动画,以便从Width="0"
滑动到Width="Auto"
。我查看了Visual States,但不确定如何使用它们。
出于测试目的,我现在尝试将第一列的可见性绑定到某个属性,指示我们是否处于编辑模式。
我可以从代码隐藏中设置第一列的Width
,但我不知道该怎么做。
我尝试在Visibility
上设置ColumnDefinition
,但它抱怨没有这样的元素存在。
我可以在每个Visibility
上设置Image
。理想情况下,我想将它绑定到代码隐藏中的属性,而不是列表框中每个项目的属性。我尝试了这个,但无法让它工作:
代码背后:
public bool Editing { get; set; }
XAML:
<Image Source="{Binding Path=IconSource}"
Grid.Column="0"
Width="96"
Height="96"
VerticalAlignment="Center"
Visibility="{Binding Path=Editing, Converter={StaticResource visibilityConverter}}" />
我还能尝试什么?难道我做错了什么?理想情况下,我只想使用Visual States。
答案 0 :(得分:0)
使用visibilityConverter绑定visibility属性,您在正确的轨道上。在没有看到其余代码的情况下很难说,但看起来你正试图将图像的可见性绑定到页面上的编辑属性(在后面的代码中)。但是,项目模板中的数据上下文不是页面,而是列表项本身(即,您将ItemSource绑定到的是什么)。
您的代码实际上是在尝试绑定到列表项上的Editing属性。如果这是你想要的(即控制每个项目的编辑),那么只需确保列表中的每个对象都有一个Editing属性(而不是页面本身的一个Editing属性)。