XAML列表视图的条件格式

时间:2016-06-18 07:06:03

标签: c# xaml listview uwp uwp-xaml

我与UWP合作非常难以置信。如果这是基本的话,我道歉。

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

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

我在下面的链接中找到的解决方案看起来很有希望,但是,在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>

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

1 个答案:

答案 0 :(得分:1)

您可以使用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的转换器类,并使用下面的代码。

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();
    }
}