我正在尝试使用毛伊社区工具包IconTint行为在基于Apptheming的集合视图中运行时为图标着色。内容页中的进程循环遍历查询服务器数据库的每个进程,一旦完成,egg计时器图标将根据服务器的响应替换为tick图标。
为了测试的目的,我使用wait. delay(500)来模拟服务器的旅程,除了图标颜色行为没有被应用并保留其原始颜色之外,这主要是正常运行的,这只发生在IOS上,在Android上它工作得很好。这也发生在其他几个视图中,我有一个wait. delay(),只要我删除它,行为就会被应用。
这是运行进程的Task,现在它只是一个用于模拟延迟的wait. delay ()
[RelayCommand]
async Task StartProcess()
{
if (await Shell.Current.DisplayAlert("End of Month Report", "Are you sure you want to run the End of Month Report?nnThis process will log off all active users.", "Yes", "No"))
{
EnableControl = false;
for (int i = 0; i < Processes.Count; i++)
{
Processes[i] = Process(Processes[i], ProcessResult.Processing, true);
await Task.Delay(1500);
Processes[i] = Process(Processes[i], ProcessResult.Completed, false);
}
await Shell.Current.DisplayAlert("Month End Report", "Month end report completed successfully. ", "Ok");
}
}
这是在流程完成后替换集合中的项目的对象,我有一个转换器,可以根据服务器响应选择图标
MonthEndProcess Process(MonthEndProcess mep, ProcessResult result, bool IsBusy)
{
MonthEndProcess process = new MonthEndProcess { completed = result == ProcessResult.Processing ? result.ToString() : result.ToString() + DateTime.Now.ToString(" dd/MM/yyyy hh:mm:ss tt"), description = mep.description, name = mep.name, IsBusy = IsBusy, status = result.ToString() };
return process;
}
这是驻留在模板
中的图像<Image Source="{Binding status, Converter={StaticResource MonthEndIconConverter}}" Grid.Column="0" Grid.RowSpan="2" HeightRequest="40" WidthRequest="40" VerticalOptions="Center" HorizontalOptions="Center" Margin="8" IsVisible="{Binding IsBusy, Converter={StaticResource InvertedBoolConverter}}">
<Image.Behaviors>
<mct:IconTintColorBehavior TintColor="{AppThemeBinding Dark={StaticResource ListIconColourDark},Light={StaticResource ListIconColour}}" />
</Image.Behaviors>
</Image>
请帮忙就太好了。
这是一个已知的问题,在ios# 14622的某些条件下,图像加载事件没有被调用,你可以在那里跟进。
目前,为了解决这个问题,你可以像Pedro建议的那样在页面上的Loaded事件上添加Behavior
:
public Test_Image()
{
InitializeComponent();
Loaded += (_, __) =>
{
this.img.Behaviors.Add(new IconTintColorBehavior()
{
TintColor = Colors.Fuchsia
});
};
}
我遇到了一个问题,它无法设置IconTintColor从它的ViewModel。虽然它可以从上面的Frame组件访问。
<Frame
Grid.Column="0"
BackgroundColor="#F7F7F7"
BorderColor="#F7F7F7"
CornerRadius="75"
HeightRequest="68"
WidthRequest="68">
<Image
HeightRequest="24"
Source="ic_dialpad"
WidthRequest="24">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="{Binding KeypadColor, Converter={StaticResource ColorConverter}}" />
</Image.Behaviors>
<Image.Triggers>
<DataTrigger
Binding="{Binding IsKeypadUp}"
TargetType="Image"
Value="true">
<Setter Property="BackgroundColor" Value="{StaticResource BtnBase}" />
</DataTrigger>
</Image.Triggers>
</Image>
<Frame.GestureRecognizers>
<TapGestureRecognizer Command="{Binding KeypadBtnPressedCommand}" />
</Frame.GestureRecognizers>
<Frame.Triggers>
<DataTrigger
Binding="{Binding IsKeypadUp}"
TargetType="Frame"
Value="true">
<Setter Property="BackgroundColor" Value="{StaticResource BtnBase}" />
</DataTrigger>
</Frame.Triggers>
</Frame>