Mat*_*ius 1 c# xaml converters xamarin xamarin.forms
我正在使用 Xamarin Forms 并尝试实现一个加载叠加层,该叠加层将显示文本,显示旋转的东西并禁用按钮。
由于加载时需要禁用按钮,我正在尝试使用 InverseBoolConverter
它在 iOS 上工作正常(给出警告,但我太酷了,不在乎),Android 却给出错误,
Error XLS0505 Type 'Helpers:InverseBoolConverter' is used like a markup extension but does not derive from MarkupExtension.
并且构建机制不够酷,无法构建它,所以我遇到了问题。
XAML:
xmlns:Helpers="clr-namespace:xxx.MobileApp.Converters"
....
<AbsoluteLayout VerticalOptions="Fill">
<Grid AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" BackgroundColor="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ScrollView Grid.Row="1">
<StackLayout Orientation="Vertical" Padding="30,-80,30,24" Spacing="10">
<Image x:Name="previewImage" Source="{Binding PreviewImage}" IsVisible="false" />
<Grid VerticalOptions="CenterAndExpand">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button Padding="20"
Margin="0,0,0,5"
Text=""
FontSize="40"
VerticalOptions="EndAndExpand"
Grid.Row="1"
IsEnabled="{Binding IsLoading, Converter={Helpers:InverseBoolConverter}}"
Command="{Binding OpenCameraCommand}"
Style="{StaticResource GrayButtonWhiteText}"
FontFamily="{StaticResource FontAwesomeSolid}"/>
<Button Padding="20"
Margin="0,5,0,0"
Text=""
FontSize="40"
VerticalOptions="StartAndExpand"
Grid.Row="2"
IsEnabled="{Binding IsLoading, Converter={Helpers:InverseBoolConverter}}"
Command="{Binding OpenGaleryCommand}"
Style="{StaticResource GrayButtonWhiteText}"
FontFamily="{StaticResource FontAwesomeSolid}"/>
</Grid>
</StackLayout>
</ScrollView>
</Grid>
<StackLayout
AbsoluteLayout.LayoutFlags="PositionProportional"
AbsoluteLayout.LayoutBounds=".5,.5,-1,-1"
Orientation="Vertical">
<Label Text="Downloading the metadata"
TextColor="Black"
IsVisible="{Binding IsLoading, Mode=TwoWay}">
</Label>
<ActivityIndicator
Color="Black"
Scale="5"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
IsRunning="{Binding IsLoading, Mode=TwoWay}" />
</StackLayout>
</AbsoluteLayout>
Run Code Online (Sandbox Code Playgroud)
转换器:
public class InverseBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return !((bool)value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
当然这是一个已知的问题,并且有人已经解决了这个问题,如何解决它?
为了将其用作标记扩展,转换器实现需要实现IMarkupExtension<IValueConverter> 创建 XAML 标记扩展,否则您可以将其作为StaticResource.
<ContentPage.Resources>
<Helpers:InverseBoolConverter x:Key="InverseBoolConverter "/>
</ContentPage.Resources>
<Button Padding="20"
Margin="0,0,0,5"
Text=""
FontSize="40"
VerticalOptions="EndAndExpand"
Grid.Row="1"
IsEnabled="{Binding IsLoading, Converter={StaticResource InverseBoolConverter}}"
Command="{Binding OpenCameraCommand}"
Style="{StaticResource GrayButtonWhiteText}"
FontFamily="{StaticResource FontAwesomeSolid}"/>
<Button Padding="20"
Margin="0,5,0,0"
Text=""
FontSize="40"
VerticalOptions="StartAndExpand"
Grid.Row="2"
IsEnabled="{Binding IsLoading, Converter={StaticResource InverseBoolConverter}}"
Command="{Binding OpenGaleryCommand}"
Style="{StaticResource GrayButtonWhiteText}"
FontFamily="{StaticResource FontAwesomeSolid}"/>
Run Code Online (Sandbox Code Playgroud)
一种更简单的方法是使用现有的东西(不是重新发明轮子), 来自XamarinCommunityToolkit包的invertedboolconverter。
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
<Button Padding="20"
Margin="0,5,0,0"
Text=""
FontSize="40"
VerticalOptions="StartAndExpand"
Grid.Row="2"
IsEnabled="{Binding IsLoading, Converter={xct:InvertedBoolConverter}}"
Command="{Binding OpenGaleryCommand}"
Style="{StaticResource GrayButtonWhiteText}"
FontFamily="{StaticResource FontAwesomeSolid}"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2695 次 |
| 最近记录: |