我有一个看起来像这样的 GridView :
<GridView ItemContainerStyle="{StaticResource GridViewItemStyle2}" ItemsSource="{Binding MyMeetingsSquareUsers}" Grid.Row="1" Margin="10,10,10,0" SelectionMode="None" HorizontalContentAlignment="Left" VerticalContentAlignment="Bottom">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Vertical" MaximumRowsOrColumns="1"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<Grid Height="35" Width="35" Margin="0,0,10,0" >
<Border BorderBrush="red" BorderThickness="1" CornerRadius="15">
<Ellipse>
<Ellipse.Fill>
<ImageBrush Stretch="Fill" ImageSource="ms-appx:///Images/photo_empty.png"/>
</Ellipse.Fill>
</Ellipse>
</Border>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
我使用的ItemsSource
是这种类型的项目列表:
public class MeetingInvitee
{
public string id { get; set; }
public string status { get; set; }
public User user { get; set; }
public BitmapImage photo { get; set; }
}
我想知道的是,是否可以根据状态中的值更改我使用的边框的颜色
例如,如果我有 3 种可能的状态:已接受
、已拒绝
、待定
,则颜色将设置为绿色、红色或相应地为黄色。
因此,如果列表中的其中一项的状态为“已拒绝”,则边框将带有红色画笔
最佳答案
条件模板(不幸的是,而不是样式数据触发器)是商店应用程序中的使用方式。您需要做的是为每种颜色定义三个不同的模板,并在后面的代码中创建一个模板选择器。
数据模板选择器
public class MeetingTemplateSelector : DataTemplateSelector
{
public DataTemplate AcceptedTemplate { get; set; }
public DataTemplate RejectedTemplate { get; set; }
public DataTemplate PendingTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item,
DependencyObject container)
{
DataTemplate result;
switch( ((MeetingInvitee) item).Status)
{
case "Accepted" : result = AcceptedTemplate; break;
case "Rejected" : result = RejectedTemplate; break;
case "Pending" : result = PendingTemplate; break;
}
return result;
}
}
在资源中声明模板
<UserControl.Resources>
<DataTemplate x:Key="AcceptedTemplate">
<Border Background="Green">
...
</Border>
</DataTemplate>
<DataTemplate x:Key="RejectedTemplate">
<Border Background="Red">
...
</Border>
</DataTemplate>
<DataTemplate x:Key="PendingTemplate">
<Border Background="Yellow">
...
</Border>
</DataTemplate>
<local:MeetingTemplateSelector x:Key="meetingSelector"
AcceptedTemplate="{StaticResource AcceptedTemplate}"
RejectedTemplate="{StaticResource RejectedTemplate}"
PendingTemplate="{StaticResource PendingTemplate}">
</local:MeetingTemplateSelector >
</UserControl.Resources>
使用
<GridView ItemContainerStyle="{StaticResource GridViewItemStyle2}"
ItemsSource="{Binding MyMeetingsSquareUsers}"
ItemTemplateSelector="{StaticResource meetingSelector}">
关于c# - Winrt,根据绑定(bind)值改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31596617/