繁体   English   中英

在特定行中更改Listview中TextBlock的颜色-uwp

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM