Xamarin.Forms.Skeleton - 什么使插件的动画和BackgroundColor 没有出现?
Xamarin.Forms.Skeleton - What make animation and BackgroundColor of the plugin doesn't appears?
我已经在我的 xamarin.form 应用程序中实现了 Skeleton 插件。它在我的列表视图页面中运行良好。然后我在我的 listView 项目详细信息中尝试它,动画和骨架 backgroundColor 不起作用。该功能运行良好,在我的构建中没有错误。
这是我试过的:
<ScrollView BackgroundColor="White">
<StackLayout
Margin="15"
extension:Skeleton.IsParent="True"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.BackgroundColor="{StaticResource GrayColor}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.AnimationInterval="600">
<Image
x:Name="ImgSelfie"
HeightRequest="200" WidthRequest="200" BackgroundColor="White"
Source="selfie"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<Label Text="Location :" FontAttributes="Bold"/>
<Editor
Text="{Binding Attend.AddressDetail}" x:Name="EdtLocation" IsEnabled="False" AutoSize="TextChanges"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<Label Text="Time :" FontAttributes="Bold"/>
<Entry
Text="{Binding Attend.Created}" x:Name="EntTime" IsEnabled="False"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}" />
<Label Text="Action :" FontAttributes="Bold"/>
<Label
Text="{Binding Attend.Activity}" x:Name="LblAction" FontSize="Medium" TextColor="Black"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<Label Text="Noted :" FontAttributes="Bold"/>
<Editor
Text="{Binding Attend.Note}" x:Name="EntNote" IsEnabled="False" AutoSize="TextChanges"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<StackLayout VerticalOptions="EndAndExpand">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<material:MaterialButton
mvx:Bi.nd="Command OnCancelButtonCommand" Text="Confirm"
ButtonType="Outlined" BorderColor="Black" BackgroundColor="White"
TextColor="Black" PressedBackgroundColor="Gray" BorderWidth="2" WidthRequest="25" Padding="15"/>
</Grid>
</StackLayout>
</StackLayout>
</ScrollView>
public async Task PerformShimmerAsyncTask(string id)
{
this.Attend = new Attendance
{
//Image = null,
AddressDetail = "x",
Created = DateTime.Now,
Activity = "x",
Note = "x"
};
this.IsLoadBusy = true;
await Task.Delay(2500);
this.IsLoadBusy = false;
//await GetItem(id);
this.Attend = new Attendance
{
//Image = "selfie.png",
AddressDetail = "asdasdasda",
Created = DateTime.Now,
Activity = "sadasdasdasfacf",
Note = "asuuusfasfa"
};
}
以下基于此 example.
如果我的问题还不清楚,请帮助和纠正。
我使用了您的代码并且在我这边运行良好,我可以向您展示我的示例项目。
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
myViewModel vm = new myViewModel();
this.BindingContext = vm;
vm.PerformShimmerAsyncTask("123");
}
}
public class myViewModel : BaseViewModel
{
private MyModel _attend;
private bool _isLoadBusy = false;
public MyModel Attend
{
get { return _attend; }
set { SetProperty(ref _attend, value); }
}
public bool IsLoadBusy
{
get { return _isLoadBusy; }
set
{
_isLoadBusy = value;
OnPropertyChanged();
}
}
public async Task PerformShimmerAsyncTask(string id)
{
this.Attend = new MyModel
{
AddressDetail = "x",
Created = DateTime.Now,
Activity = "x",
Note = "x"
};
this.IsLoadBusy = true;
await Task.Delay(10000);
this.IsLoadBusy = false;
this.Attend = new MyModel
{
AddressDetail = "asdasdasda",
Created = DateTime.Now,
Activity = "sadasdasdasfacf",
Note = "asuuusfasfa"
};
}
}
public class MyModel
{
public string AddressDetail { get; set; }
public DateTime Created { get; set; }
public string Activity { get; set; }
public string Note { get; set; }
}
Xaml
中的代码与您的相同。你应该确保你设置了正确的 bindingContext
并正确地调用了 PerformShimmerAsyncTask
。
我上传了示例项目here。让我知道它是否适合你。
我已经在我的 xamarin.form 应用程序中实现了 Skeleton 插件。它在我的列表视图页面中运行良好。然后我在我的 listView 项目详细信息中尝试它,动画和骨架 backgroundColor 不起作用。该功能运行良好,在我的构建中没有错误。
这是我试过的:
<ScrollView BackgroundColor="White">
<StackLayout
Margin="15"
extension:Skeleton.IsParent="True"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.BackgroundColor="{StaticResource GrayColor}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.AnimationInterval="600">
<Image
x:Name="ImgSelfie"
HeightRequest="200" WidthRequest="200" BackgroundColor="White"
Source="selfie"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<Label Text="Location :" FontAttributes="Bold"/>
<Editor
Text="{Binding Attend.AddressDetail}" x:Name="EdtLocation" IsEnabled="False" AutoSize="TextChanges"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<Label Text="Time :" FontAttributes="Bold"/>
<Entry
Text="{Binding Attend.Created}" x:Name="EntTime" IsEnabled="False"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}" />
<Label Text="Action :" FontAttributes="Bold"/>
<Label
Text="{Binding Attend.Activity}" x:Name="LblAction" FontSize="Medium" TextColor="Black"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<Label Text="Noted :" FontAttributes="Bold"/>
<Editor
Text="{Binding Attend.Note}" x:Name="EntNote" IsEnabled="False" AutoSize="TextChanges"
extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
extension:Skeleton.Animation="Fade"
extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
<StackLayout VerticalOptions="EndAndExpand">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<material:MaterialButton
mvx:Bi.nd="Command OnCancelButtonCommand" Text="Confirm"
ButtonType="Outlined" BorderColor="Black" BackgroundColor="White"
TextColor="Black" PressedBackgroundColor="Gray" BorderWidth="2" WidthRequest="25" Padding="15"/>
</Grid>
</StackLayout>
</StackLayout>
</ScrollView>
public async Task PerformShimmerAsyncTask(string id)
{
this.Attend = new Attendance
{
//Image = null,
AddressDetail = "x",
Created = DateTime.Now,
Activity = "x",
Note = "x"
};
this.IsLoadBusy = true;
await Task.Delay(2500);
this.IsLoadBusy = false;
//await GetItem(id);
this.Attend = new Attendance
{
//Image = "selfie.png",
AddressDetail = "asdasdasda",
Created = DateTime.Now,
Activity = "sadasdasdasfacf",
Note = "asuuusfasfa"
};
}
以下基于此 example.
如果我的问题还不清楚,请帮助和纠正。
我使用了您的代码并且在我这边运行良好,我可以向您展示我的示例项目。
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
myViewModel vm = new myViewModel();
this.BindingContext = vm;
vm.PerformShimmerAsyncTask("123");
}
}
public class myViewModel : BaseViewModel
{
private MyModel _attend;
private bool _isLoadBusy = false;
public MyModel Attend
{
get { return _attend; }
set { SetProperty(ref _attend, value); }
}
public bool IsLoadBusy
{
get { return _isLoadBusy; }
set
{
_isLoadBusy = value;
OnPropertyChanged();
}
}
public async Task PerformShimmerAsyncTask(string id)
{
this.Attend = new MyModel
{
AddressDetail = "x",
Created = DateTime.Now,
Activity = "x",
Note = "x"
};
this.IsLoadBusy = true;
await Task.Delay(10000);
this.IsLoadBusy = false;
this.Attend = new MyModel
{
AddressDetail = "asdasdasda",
Created = DateTime.Now,
Activity = "sadasdasdasfacf",
Note = "asuuusfasfa"
};
}
}
public class MyModel
{
public string AddressDetail { get; set; }
public DateTime Created { get; set; }
public string Activity { get; set; }
public string Note { get; set; }
}
Xaml
中的代码与您的相同。你应该确保你设置了正确的 bindingContext
并正确地调用了 PerformShimmerAsyncTask
。
我上传了示例项目here。让我知道它是否适合你。