CodeGo.net>如何仅使用XAML基于轻击事件更改文本块的可见性
作者:互联网
我有一个listview显示图像列表.图像是不同国家的国旗.然后单击标志,将显示所显示国家的名称.该特定国家的唯一名称.
我做了什么:
定义了一个列表视图.使用数据绑定将内容添加到列表视图.列表视图具有图片和一个TextBlock. TextBlock最初保持折叠状态.
我使用Behaviors SDK更改了Grid的Tap事件上TextBlock的可见性.
因此,当我点击印度的国旗图像时,就会显示相应的国家名称(印度).
当我点击法国的标志时,法国将显示在TextBlock上.
这是屏幕截图:
仅应显示最后单击的标志的名称.而不是显示被单击的al标志的名称.
当单击印度国旗时,会立即显示印度.当我单击丹麦的标志时,TextBlock不会从印度的网格中隐藏.而是两个TextBlocks都保持可见.
<ListView ItemsSource="{Binding CountryDetails}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="Tapped">
<ic:ChangePropertyAction TargetObject="{Binding ElementName=countryName}" PropertyName="Visibility" Value="Visible"/>
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
<Image Source="{Binding flagImages}" CacheMode="BitmapCache">
</Image>
<TextBlock Visibility="Collapsed" Name="countryName" Text="{Binding countryTitle}"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我要尝试的是:
任何帮助或建议将是巨大的.谢谢.
解决方法:
这是一种方法,但可能不如代码隐藏或视图模型中的好.
<ListView x:Name="lv">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<i:Interaction.Behaviors>
<icore:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue}" Value="{Binding}" ComparisonCondition="Equal">
<icore:ChangePropertyAction TargetObject="{Binding ElementName=tb}" PropertyName="Visibility" Value="Visible" />
</icore:DataTriggerBehavior>
<icore:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue}" Value="{Binding}" ComparisonCondition="NotEqual">
<icore:ChangePropertyAction TargetObject="{Binding ElementName=tb}" PropertyName="Visibility" Value="Collapsed" />
</icore:DataTriggerBehavior>
</i:Interaction.Behaviors>
<Image Source="/Assets/Logo.png" />
<TextBlock x:Name="tb" Grid.Column="2" Visibility="Collapsed" FontSize="20" Text="{Binding}" VerticalAlignment="Center" Margin="10,0,0,0" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Items>
<x:String>Australia</x:String>
<x:String>Italy</x:String>
<x:String>France</x:String>
<x:String>USA</x:String>
<x:String>China</x:String>
<x:String>Japan</x:String>
<x:String>Sweden</x:String>
</ListView.Items>
</ListView>
我上面给出的示例非常基本,但是很可能已将页面绑定到视图模型,并将列表视图的ItemsSource绑定到视图模型上的属性(很可能是字符串的ObservableCollection或自定义类型).在这种情况下,请确保相应地更新绑定:
<ListView x:Name="lv" ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<i:Interaction.Behaviors>
<!-- Must compare strings otherwise DataTriggerBehavior complains -->
<icore:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.Name}" Value="{Binding Name}" ComparisonCondition="Equal">
<icore:ChangePropertyAction TargetObject="{Binding ElementName=tb}" PropertyName="Visibility" Value="Visible" />
</icore:DataTriggerBehavior>
<icore:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.Name}" Value="{Binding Name}" ComparisonCondition="NotEqual">
<icore:ChangePropertyAction TargetObject="{Binding ElementName=tb}" PropertyName="Visibility" Value="Collapsed" />
</icore:DataTriggerBehavior>
</i:Interaction.Behaviors>
<Image Source="/Assets/Logo.png" />
<TextBlock x:Name="tb" Grid.Column="2" Visibility="Collapsed" FontSize="20" Text="{Binding Name}" VerticalAlignment="Center" Margin="10,0,0,0" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
其中Items是ObservableCollection< Country>.和
public class Country
{
public string Name { get; set; }
}
标签:winrt-xaml,windows-phone-8-1,microsoft-metro,xaml,c 来源: https://codeday.me/bug/20191028/1955718.html