我在下面编写了XAML和C#代码,以便在Android和iOS上将IsVisible
的{{1}}属性设置为ActivityIndicator
。代码隐藏中的C#代码将相同的属性绑定到Windows上绑定上下文的True
属性。此代码在所有平台上都按预期工作。
IsBusy
我希望仅使用XAML具有相同的行为。我尝试了下面没有任何工作的代码片段。
# XAML Code
<ActivityIndicator x:Name="AI" IsEnabled="{Binding Path=IsBusy}" IsVisible="True" IsRunning="{Binding Path=IsBusy}"/>
# C# Code
if (Device.RuntimePlatform == Device.Windows)
{
AI.SetBinding(IsVisibleProperty, new Binding(nameof(ViewModel.IsBusy)));
}
是否可以在XAML中完成此操作?
答案 0 :(得分:0)
我不确定为什么BindingBase
选项不起作用,但对于其他情况,很明显问题是类型不匹配。
为了解决这个问题,我猜你可以使用样式设置器提供默认值,同时使用OnPlatform
覆盖它们:
//App or Page resources to set default properties
<ResourceDictionary>
<Style TargetType="ActivityIndicator" x:Key="AIStyle">
<Setter Property="IsEnabled" Value="{Binding Path=IsBusy}" />
<Setter Property="IsRunning" Value="{Binding Path=IsBusy}" />
</Style>
</ResourceDictionary>
//And use following to define control
<OnPlatform x:TypeArguments="View">
<On Platform="Android, iOS">
<ActivityIndicator IsVisible="true" Style="{StaticResource AIStyle}" />
</On>
<On Platform="Windows">
<ActivityIndicator IsVisible="{Binding Path=IsBusy}" Style="{StaticResource AIStyle}" />
</On>
</OnPlatform>