【发布时间】:2016-09-07 16:30:20
【问题描述】:
我有一个基于以下类的 ObservableCollection:
public class Data
{
public string Text { get; set; }
public DateTime Date { get; set; }
public bool IsActive { get; set; }
}
这个 observablecollection 被使用和绑定为 ListView 的 ItemSource。下面是展示数据的DataTemplate——
<DataTemplate>
<ViewCell>
<Frame OutlineColor="White" HasShadow="False">
<!-- Data -->
</Frame>
</ViewCell>
</DataTemplate>
由于 ObservableCollection 是具有 布尔属性的 Data 类的集合,我想使用它来更改框架的背景颜色:
如果 IsActive 属性为真 - BackgroundColor 为红色
如果 IsActive 属性为 false - BackgroundColor 为蓝色
我已经研究了触发器的实现,但是我似乎无法让它们正常工作,而且我不确定我缺少什么。
根据 Xamarin 文档,我应该能够做到:
<Frame>
<Frame.Trigger>
<!-- -->
</Frame.Trigger>
</Frame>
然而这似乎是不可能的。这也不是——
<Frame>
<Frame.Style>
<Style TargetType="Frame">
<Setter Property="BackgroundColor" Value="Blue" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive}" Value="True">
<Setter Property="BackgroundColor" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Frame.Style>
</Frame>
上面的代码给出了以下错误信息:
Xamarin.Forms.Xaml.XamlParseException: Position 28:26. The Property TargetType is required to create a Xamarin.Forms.DataTrigger object.
【问题讨论】:
-
您确定行号与定义框架样式的位置匹配吗?我不确定 xamarin,但可能尝试使用 {x:Type } 扩展而不是依赖于字符串 - > TargetType 属性中的类型转换?
-
您是否直接在
<Frame>标签中设置您的BackgroundColor?如果是这样,该属性将覆盖任何触发或样式化的值。另一件要尝试的事情可能是使用TargetType={x:Type Frame},偶尔我会看到文本字符串无法解析为实际类型,所以这可以防止这种情况发生。