我与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>
有没有人有一些我应该看的建议或方向?
答案 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();
}
}