2016-07-01 5 views
0

Я не понимаю, что-то о том, как установить атрибут объекта для XAML о булево ..Xamarin Forms XAML - булево набор атрибутов из 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}}"


ли я делаю что-то не так?

ответ

1

Просто установите значение, вам не нужно использовать разметки синтаксиса расширения (эти "{}" скобки) или преобразователь:

ProportionalSize="True" 
+0

Я уже пробовал .. Я сказал это;) -> Потому что ни 'true' ни' true' работает, я сделал ** BooleanConverter ** – Emixam23

+0

Пожалуйста вывесить точный код, используемый, чтобы попробовать, что и точное сообщение об ошибке, которое вы получаете, возможно, вы пробовали, но ваш код, указанный выше, не показывает эти вещи. Конвертер просто не нужен для установки простого предопределенного значения для таких фундаментальных типов, как System.Boolean. –

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

Если вы фактически не привязаны к значению, которое изменится ... Не используйте конвертер или свойство. Похоже, вы просто хотите установить true один раз в XAML. Вы можете использовать для этого атрибут x:Arguments.

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

Больший пример из DataTrigger.

USECASE - Сетка имеет другое значение привязываться к IsVisible, но мы хотим переопределить, что если администратор вошел в систему Таким образом, в дополнение к регулярным связыванием, мы можем поставить в DataTrigger, который использует x:Arguments из x:Boolean к. установите его на true. - Без конвертера ... без свойства.

<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> 
Смежные вопросы