【问题标题】:Conditional formatting of a XAML listviewXAML 列表视图的条件格式
【发布时间】:2016-10-20 00:59:55
【问题描述】:

我对使用 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>

有人有什么建议或我应该寻找的方向吗?

【问题讨论】:

    标签: c# xaml listview uwp uwp-xaml


    【解决方案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();
        }
    }
    

    【讨论】:

    • 我在尝试编译时遇到了一些错误。编译器说名称空间中不存在 PersonToColorConverter。在我链接的股票示例中,我添加了: On MasterDetailSelection.xaml 然后我在项目的根目录中创建了一个名为 converterClass 的新类.cs 并粘贴到命名空间 ListViewSample 内的 c# 中。
    • 我修好了。奇怪的是,我重新启动后它似乎编译得很好。它就像一个魅力。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2017-04-20
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多