按下ImageButton使图像非常小[Xamarin]

问题描述 投票:0回答:1

请检查GIF以了解问题。

我实际上在这里使用了两个imagebutton并更改了IsVisible,因为我无法通过源上的Binding来完成图像交换。

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}" />

xamarin swap imagebutton visible
1个回答
0
投票

我实际上在这里使用了两个imagebutton并更改了IsVisible,因为我无法通过源上的Binding来完成图像交换。

创建视图模型。

 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

© www.soinside.com 2019 - 2024. All rights reserved.