2016-07-01 16 views
0

Ich verstehe nicht, etwas darüber, wie Objektattribut für XAML über boolean gesetzt ..Xamarin XAML Forms - Boolean-Attribut von XAML

Ich habe einen MainPage.xaml dies wie, wo ich ProportionalSize zu true gesetzt :

<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> 

ich ein customImage aus irgendeinem Grund verwenden, ist dies die Klasse

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

Da weder true noch True Werke, machte ich einen 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; 
    } 
} 

Es ist jedoch immer noch nicht funktioniert ...


Zusätzliche Informationen: Position 19:75. Markupextension nicht für echte ProportionalSize="{True, Converter={StaticResource Boolean}}"


gefunden Does ich etwas falsch tue?

Antwort

1

Setzen Sie einfach den Wert, die Sie nicht Markup Erweiterung Syntax (die "{}" Klammern) oder einen Konverter verwenden müssen:

ProportionalSize="True" 
+0

ich schon versucht .. Ich sagte, es;) -> Da weder 'true' noch' true' funktioniert, habe ich a ** ** BooleanConverter – Emixam23

+0

Bitte senden Sie den genauen Code, den Sie versuchen, dass verwendet, und die genaue Fehlermeldung, die Sie bekommen - Sie haben es vielleicht versucht, aber Ihr Code oben zeigt diese Dinge nicht. Ein Konverter ist einfach nicht notwendig, um einen einfachen vordefinierten Wert für fundamentale Typen wie System.Boolean zu setzen. –

0

Versuchen verwenden 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(); 
     } 
    } 
1

Wenn Sie nicht an einen Wert gebunden sind, der sich ändert ... Verwenden Sie keinen Konverter oder keine Eigenschaft. Es sieht so aus, als ob Sie nur einmal in XAML true setzen möchten. Sie können dafür das Attribut x:Arguments verwenden.

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

Bigger Beispiel von einem DataTrigger.

Usecase - Das Gitter hat einen anderen Wert zu IsVisible binded, aber wir wollen, dass außer Kraft zu setzen, wenn der Administrator angemeldet ist also zusätzlich zu dem regulären Bindung können wir in einem Datatrigger setzen, die die x:Arguments von x:Boolean verwendet zu. setze es auf true. - Ohne einen Konverter ... ohne eine Eigenschaft.

<Grid.Triggers> 
    <DataTrigger Binding="{Binding IsAdmin}" 
     TargetType="{x:Type Grid}" 
     Value="True"> 
     <Setter Property="IsVisible"> 
      <Setter.Value> 
       <x:Arguments> 
        <x:Boolean>True</x:Boolean> 
       </x:Arguments> 
      </Setter.Value> 
     </Setter> 
    </DataTrigger> 
</Grid.Triggers>