Xamarin.Forms Изменить десятичное число в процентах - PullRequest
0 голосов
/ 09 мая 2020

У меня есть десятичное значение, которое я хочу отображать и редактировать в процентах с помощью элемента управления Xamarin.Forms <Entry />. Я пытался использовать IValueConverter, но когда я редактирую, курсор оказывается повсюду, и его действительно сложно редактировать правильно и просто. Я получаю то же самое, используя StringFormat=.

a) Как я могу просто и легко редактировать десятичную дробь как * 100?

b) Могу ли я показать символ%?

c) Могу ли я выполнить преобразование условно: когда поле Y = 1, показывать в процентах, когда поле Y = 2, показывать как десятичное?

1 Ответ

1 голос
/ 11 мая 2020

a) Как мне просто и легко отредактировать десятичную дробь как * 100? б) Могу ли я показать символ%?

Вы можете использовать событие UnFocused для отображения десятичного значения как символа%.

Xaml:

 <Entry x:Name="entry" Unfocused="entry_Unfocused"/>

Код:

  private void entry_Unfocused(object sender, FocusEventArgs e)
    {
        var entry = sender as Entry;
        decimal value;
        if (Decimal.TryParse(entry.Text, out value))
        {
            entry.Text = value.ToString("P");
        }
        else
        {
            DisplayAlert("Error", "Please input decimal", "Cancel");
        }

    }

enter image description here

c) Могу ли я выполнить преобразование условно: когда поле Y = 1, показывать в процентах , Когда поле Y = 2, показывать как десятичное?

Xaml:

 <StackLayout>
        <Label x:Name="label" Text="Y:" />
        <Entry x:Name="entry_Y" />
        <Entry x:Name="entry" Unfocused="entry_Unfocused" />

    </StackLayout>

Код:

 private void entry_Unfocused(object sender, FocusEventArgs e)
    {
        var entry = sender as Entry;
        if (entry_Y.Text=="1")
        {               
            decimal value;
            if (Decimal.TryParse(entry.Text, out value))
            {
                entry.Text = value.ToString("P");
            }
            else
            {
                DisplayAlert("Error", "Please input decimal", "Cancel");
            }
        }
        else if (entry_Y.Text == "2")
        {
            decimal value;
            if (Decimal.TryParse(entry.Text, out value))
            {
                entry.Text = value.ToString();
            }
            else
            {
                DisplayAlert("Error", "Please input decimal", "Cancel");
            }
        }

    }

enter image description here

...