XAML 列表视图的条件格式

Conditional formatting of a XAML listview

我对使用 UWP 非常陌生。如果这是基本问题,我深表歉意。

我正在查看 Microsoft 在 GitHub 上提供的一些示例。 ( https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlListView )

我正在尝试做的是使用 XAML ListView 示例,但如果满足条件,则对列表应用一些条件格式。如if Contact.Position == "Developer",将文字颜色改为绿色。

我在下面 link 中找到的解决方案看起来很有希望,但是,在 WPF 中使用的样式触发器在 UWP 中不可用。 Conditional formating of a TextBlock within a Listbox’s DataTemplate

listView中每一项生成的XAML定义为:

<DataTemplate x:Name="SpectraListViewTemplate" x:DataType="data:spectraClass">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Ellipse x:Name="Ellipse"
                 Grid.RowSpan="2"
                 Width ="32"
                 Height="32"
                 Margin="6"
                 VerticalAlignment="Center"
                 HorizontalAlignment="Center"
                 Fill="LightGray"/>
        <TextBlock Grid.RowSpan="2"
                   Width="{Binding ElementName=Ellipse, Path=Width}"
                   Height="{Binding ElementName=Ellipse, Path=Height}"
                   Margin="6"
                   Foreground="{ThemeResource ApplicationPageBackgroundThemeBrush}"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                   Text="{x:Bind Id}"
                   x:Phase="1"/>
        <TextBlock x:Name="SpectraListViewTemplateNameTextBox"
                    Grid.Column="1"
                   Text="{x:Bind Name}" 
                   x:Phase="1"  
                   Style="{ThemeResource BaseTextBlockStyle}"
                   Margin="12,6,0,0"/>
        <TextBlock  Grid.Column="1"
                    Grid.Row="1"
                    Text="{x:Bind Date}" 
                    x:Phase="2"
                    Style="{ThemeResource BodyTextBlockStyle}"
                    Margin="12,0,0,6"/>
    </Grid>
</DataTemplate>

有没有人有一些建议或我应该寻找的方向?

您可以使用 IValueConverter 来实现。

代码:

//Add the below code in your references in xaml
xmlns:converters="using:MyProject.Converter"

//Add this part to the resources in the page
<Page.Resources>
        <converters:PersonToColorConverter x:Key="PersonToColorConverter" />
</Page.Resources>

//This could be a part of your ListView DataTemplate.
<TextBlock Text="Hello" Foreground="{Binding Position,Converter{StaticResource PersonToColorConverter}}" />

现在创建一个名为 PersonToColorConverter 的转换器 class 并使用以下代码。

public class PersonToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
          SolidColorBrush brush = new SolidColorBrush();
          string personPosition = value.ToString();
          if(personPosition!=null && personPosition.Equals("Developer"))
          {
                brush.Color = Colors.Green;
          }
          else
          {
                brush.Color = Colors.White;
          }
          return brush;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return new NotImplementedException();
    }
}