Нажатие кнопки ImageButton делает изображение очень маленьким [Xamarin] - PullRequest
0 голосов
/ 19 марта 2020

Пожалуйста, проверьте GIF на наличие проблемы.

Я на самом деле использую здесь две кнопки изображения и изменил IsVisible, так как я не смог sh поменять местами изображение, связав с источником.

ViewModel:

    public bool IsAudioPlaying
    {
        get => player.IsPlaying;
    }

...

    public void PlayOrPause()
    {
        if (player.IsPlaying)
            player.Pause();
        else
            player.Play();
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsAudioPlaying"));
    }

XAML:

  <ImageButton  AbsoluteLayout.LayoutBounds=".5, 0, 100, 100" AbsoluteLayout.LayoutFlags="PositionProportional" Source="play.png" Padding="20" WidthRequest="80" HeightRequest="80" 
                          CornerRadius="40" VerticalOptions="Center" HorizontalOptions ="Center" BackgroundColor="#cea448" Clicked="PlayOrPause" Margin="10"  IsVisible="{Binding IsAudioPlaying, Converter={StaticResource InverseBoolConverter}}" />
  <ImageButton  AbsoluteLayout.LayoutBounds=".5, 0, 100, 100" AbsoluteLayout.LayoutFlags="PositionProportional" Source="pause.png" Padding="20" WidthRequest="80" HeightRequest="80" 
                          CornerRadius="40" VerticalOptions="Center" HorizontalOptions ="Center" BackgroundColor="#cea448" Clicked="PlayOrPause" Margin="10"  IsVisible="{Binding IsAudioPlaying}" />

1 Ответ

0 голосов
/ 20 марта 2020

Я на самом деле использую здесь две кнопки изображения и изменяю IsVisible, поскольку я не смог sh поменять местами изображение путем привязки к источнику.

Создать модель представления.

 public class ViewModel : INotifyPropertyChanged
{
    private bool _isAudioPlaying;
    public bool IsAudioPlaying
    {
        get
        {
            return _isAudioPlaying;
        }
        set
        {
            _isAudioPlaying = value;
            OnPropertyChanged("IsAudioPlaying");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Используйте ObservableCollection для обновления.

 ObservableCollection<ViewModel> observableCollection { get; set; }

    public MainPage()
    {
        InitializeComponent();

        observableCollection = new ObservableCollection<ViewModel>()
        {
           new ViewModel(){ IsAudioPlaying=true}
        };
        this.BindingContext = observableCollection;
    }

    private void PlayOrPause(object sender, EventArgs e)
    {

        if (observableCollection[0].IsAudioPlaying == true)
        {
            observableCollection[0].IsAudioPlaying = false;
            imageButton.Source = "pause.png";
        }
        else
        {
            observableCollection[0].IsAudioPlaying = true;
            imageButton.Source = "play.png";
        }
    }

enter image description here

...