[英]How to change the selected text color in a TextBlock in a ListView?
[英]Change the color of TextBlock in Listview for a particular row - uwp
我有一个列表视图,绑定了一个类的数据。
<ListView x:Name="ItemListView" ScrollViewer.VerticalScrollBarVisibility="Auto" Width="Auto" HorizontalAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
<TextBlock Text="{Binding Name}" TextAlignment="Left" FontSize="20" Width="50"/>
</StackPanel>
<StackPanel >
<TextBlock x:Name="tb_age" Text="{Binding Age}" FontSize="20" TextAlignment="Center"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
private void LoadListView()
{
ItemDetails messageData = new ItemDetails();
ItemListView.ItemsSource = messageData.Collection;
}
public class ItemDetails
{
public ItemDetails()
{
MatchList item;
item = new MatchList();
item.Name = "A";
item.Age = "10";
Collection.Add(item);
item = new MatchList();
item.Name = "B";
item.Age = "20";
Collection.Add(item);
item = new MatchList();
item.Name = "A";
item.Age = "30";
Collection.Add(item);
}
}
现在,我想在TextBlock(tb_age)的值等于10时更改其原色。如何遍历每个单元格并获取其文本以比较值?
只需编写一个将Age转换为特定颜色的转换器。
https://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter(v=vs.110).aspx
<ListView x:Name="ItemListView" ScrollViewer.VerticalScrollBarVisibility="Auto" Width="Auto" HorizontalAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
<TextBlock Text="{Binding Name}" TextAlignment="Left" FontSize="20" Width="50"/>
</StackPanel>
<StackPanel >
<TextBlock x:Name="tb_age"
Text="{Binding Age}"
ForeGround={Binding Age, Converter={StaticResource AgeToColorConvert}}
FontSize="20"
TextAlignment="Center"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
转换-非常简单的实现:
public override object Convert(
object value,
Type targetType,
object parameter)
{
int iValue;
if (int.TryParse(value.ToString(), out iValue))
{ if (iValue == 10) return Colors.Blue; }
return Colors.Black;
}
您可以从NuGet安装Microsoft.Xaml.Behaviors.Uwp.Managed
程序包 ,然后使用DataTriggerBehavior
设置前台。
首先将名称空间声明添加到<Page>
元素:
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:Interactions="using:Microsoft.Xaml.Interactions.Core"
现在,您可以像以下方式使用它:
<StackPanel>
<Interactivity:Interaction.Behaviors>
<Core:DataTriggerBehavior Binding="{Binding Age}" Value="10">
<Core:ChangePropertyAction TargetObject="{Binding ElementName=tb_age}"
PropertyName="Foreground" Value="Red" />
</Core:DataTriggerBehavior>
</Interactivity:Interaction.Behaviors>
<TextBlock x:Name="tb_age" Text="{Binding Age}" FontSize="20" TextAlignment="Center" />
</StackPanel>
请注意,您不能使用Style
触发器,因为它们在UWP应用中不可用。
此解决方案的优势是基于100%XAML,因此您不必修改C#代码本身,并且表示形式仍保留在声明性XAML代码中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.