我在整個應用程序中都有活動指標,但我覺得這是重複的。我想知道我是否可以定義單個活動指標並在整個應用程序中使用它?是否有可能爲整個應用程序提供一個活動指示器?
下面是我在應用程序中的五個活動指標之一的代碼。除標籤文字改變外,其他人都完全一樣。
<AbsoluteLayout x:Name="ActivityInd" IsVisible="False" BackgroundColor="Black" Opacity=".75" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
<StackLayout AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" VerticalOptions="Center" HorizontalOptions="Center">
<ActivityIndicator x:Name="Activityblocker" Color="White"/>
<Label Text="Processing Request" TextColor="White"/>
</StackLayout>
</AbsoluteLayout>
如果可能的話,最好放在哪裏,以便它可以從應用程序的任何位置調用?
編輯:
得到的一切工作,並更換了所有與我創建的控制活動的指標。以下是代碼,希望這可以幫助未來的人。綁定的
控制XAML
<?xml version="1.0" encoding="UTF-8"?>
<AbsoluteLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Myapp.ActivityBlocker"
x:Name="ActivityIndAL" IsVisible="{Binding IsBusy, Source={x:Reference ActivityIndAL}}" BackgroundColor="Black" Opacity=".75" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
<StackLayout AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" VerticalOptions="Center" HorizontalOptions="Center">
<ActivityIndicator x:Name="Activityblocker" Color="White" IsEnabled="{Binding IsBusy, Source={x:Reference ActivityIndAL}}" IsRunning="{Binding IsBusy, Source={x:Reference ActivityIndAL}}"/>
<Label Text="{Binding Text, Source={x:Reference ActivityIndAL}}" x:Name="ActivityIndLabel" TextColor="White"/>
</StackLayout>
</AbsoluteLayout>
控制xaml.cs
public partial class ActivityBlocker : AbsoluteLayout
{
public ActivityBlocker()
{
InitializeComponent();
}
public static readonly BindableProperty TextProperty = BindableProperty.Create(nameof(Text), typeof(string), typeof(ActivityBlocker));
public static readonly BindableProperty Running = BindableProperty.Create(nameof(IsBusy), typeof(bool), typeof(ActivityBlocker), false);
public string Text
{
get
{
return (string)GetValue(TextProperty);
}
set
{
SetValue(TextProperty, value);
}
}
public bool IsBusy
{
get
{
return (bool)GetValue(Running);
}
set
{
SetValue(Running, value);
}
}
}
如何使用控制:您將添加到xmlns:control="clr-namespace:MyApp"
要使用該控件的contentpage。現在添加控件和文本。注意:因爲在BindableProperty.Create
中默認值爲false,所以不需要IsBusy =「False」。 IsBusy可以訪問和通過這樣indicator.IsBusy = true;
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:control="clr-namespace:MyApp"
....
<ContentPage.Content>
<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<control:ActivityBlocker x:Name="indicator" Text="Processing Request" IsBusy="False"/>
</AbsoluteLayout>
</ContentPage.Content>
....
您可以創建自定義控件 –
@YuriS這是完美的。不知道你可以在Xamarin中創建一個自定義控件。所以[這](https://xamarinhelp.com/xamarin-forms-user-control/)幫助指導的內容幾乎就是我所要做的。正確?如果是這樣,一旦我找到工作,我會放棄併發布代碼。謝謝。 – 11011
是的,這是一篇很棒的文章。他正在做Grid而不是ContentView。如果你想要的佈局,但你會做AbsoluteLayout,但Grid也適合你。我也會質疑你是否需要StackLayout。您將創建例如BusyText的可綁定屬性並將其綁定到您的標籤文本 –