我在 XAML 中定义了一个矩形,我想根据数据触发器调整其颜色。我从这样简单的事情开始。
<Rectangle Grid.Row="0" Grid.Column="0" BackgroundColor="#00FF00">
<Rectangle.Triggers>
<DataTrigger TargetType="Rectangle" Binding="{Binding Cancelled}" Value="True">
<Setter Property="BackgroundColor" Value="#FF0000" />
</DataTrigger>
</Rectangle.Triggers>
</Rectangle>
这适用于 Android,但在 iOS 上颜色始终为 #00FF00。
Cancelled
在我的视图模型中是一个可为空的布尔值(bool?)。我已经验证该值确实设置为true
。我可以使用其他视图上的 Cancelled
绑定来控制可见性等内容。例如,这按预期工作。
<Label IsVisible="{Binding Cancelled}" Text="Canceled" />
我尝试使这项工作的最后一次迭代看起来像这样。
<Rectangle Grid.Row="0" Column="0">
<Rectangle.Style>
<Style TargetType="Rectangle">
<Style.Triggers>
<DataTrigger TargetType="Rectangle" Binding="{Binding Cancelled}" Value="{x:Null}">
<Setter Property="BackgroundColor" Value="#0000FF" />
</DataTrigger>
<DataTrigger TargetType="Rectangle" Binding="{Binding Cancelled}" Value="False">
<Setter Property="BackgroundColor" Value="#00FF00" />
</DataTrigger>
<DataTrigger TargetType="Rectangle" Binding="{Binding Cancelled}" Value="True">
<Setter Property="BackgroundColor" Value="#FF0000" />
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
但是,iOS 上的颜色仍然始终是#00FF00。这个问题似乎只影响背景颜色。例如,此触发器按预期工作。
<Rectangle.Triggers>
<DataTrigger TargetType="Rectangle" Binding="{Binding Cancelled}" Value="True">
<Setter Property="HeightRequest" Value="500" />
</DataTrigger>
</Rectangle.Triggers>
我尝试使用
Background
代替 BackgroundColor
但仍然不起作用。
来自 矩形文档
要绘制矩形的内部,请将其 Fill 属性设置为 Brush 派生对象。
所以你可以使用
Fill
属性而不是 BackgroundColor
,
<Rectangle.Triggers>
<DataTrigger TargetType="Rectangle" Binding="{Binding Cancelled}" Value="True">
<Setter Property="Fill" Value="#FF0000" />
</DataTrigger>
</Rectangle.Triggers>
如果您有任何疑问,请告诉我。