我不了解如何为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();
}
}
}
因为true
和True
都不起作用,我制作了 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}}"
我做错了吗?
答案 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();
}
}