Xamarin Forms XAML - 从XAML设置的布尔属性

时间:2016-07-01 23:18:49

标签: c# xaml boolean xamarin.forms

我不了解如何为xaml设置关于布尔值的对象属性..

我有一个 MainPage.xaml ,我将ProportionalSize设置为true

<ContentPage.Resources>
  <ResourceDictionary>
    <converter:BooleanConverter x:Key="Boolean"/>
  </ResourceDictionary>
</ContentPage.Resources>

<ContentPage.Content>
  <!-- Background during loading of start -->
  <AbsoluteLayout>
    <local:CustomImage Source="{extension:ImageResource HomeBG.png}"
                     ProportionalWidth="100" ProportionalHeight="100" ProportionalSize="{True, Converter={StaticResource Boolean}}"
                     AbsoluteLayout.LayoutBounds="0.5, 0.5, 1, 1"
                     AbsoluteLayout.LayoutFlags="All"/>
  </AbsoluteLayout>
</ContentPage.Content>  

我出于某种原因使用customImage,这是类

public class CustomImage : Image
{
    private bool _ProportionalSize;
    public bool ProportionalSize
    {
        get { return this._ProportionalSize; }
        set
        {
            this._ProportionalSize = value;
            TrySize();
        }
    }
}

因为trueTrue都不起作用,我制作了 BooleanConverter

public class BooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (bool)value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (bool)value;
    }
}

然而,它仍然无法运作......

补充资料:位置19:75。找不到真正的MarkupExtension ProportionalSize="{True, Converter={StaticResource Boolean}}"

我做错了吗?

3 个答案:

答案 0 :(得分:1)

只需设置值,您不需要使用标记扩展语法(那些“{}”括号)或转换器:

ProportionalSize="True"

答案 1 :(得分:1)

如果您实际上没有绑定到将要更改的值...请勿使用转换器或属性。看起来您只想在XAML中设置true一次。您可以使用x:Arguments属性。

<x:Arguments>
    <x:Boolean>True</x:Boolean>
</x:Arguments>

来自DataTrigger的更大范例。

Usecase - 网格具有绑定到IsVisible的不同值,但是如果管理员已登录,我们希望覆盖它。因此除了常规绑定之外,我们还可以放入使用{的数据触发器。 {1}} {1}}将其设置为x:Arguments。 - 没有转换器......没有财产。

x:Boolean

答案 2 :(得分:0)

尝试使用BindableProperty

    public static readonly BindableProperty ProportionalSizeProperty =
            BindableProperty.Create(nameof(ProportionalSize),
                                    typeof(bool),
                                    typeof(CustomImage),
                                    default(bool),
                                    propertyChanged: OnProportionalSizeChanged);

    public bool ProportionalSize
    {
        get { return (bool)GetValue(ProportionalSizeProperty); }
        set { SetValue(ProportionalSizeProperty, value); }
    }

    private static void OnProportionalSizeChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var customImage = bindable as CustomImage;
        if (customImage != null)
        {
            customImage.TrySize();
        }
    }