让我从两个图像开始,from图像和to图像:

enter image description here enter image description here

我想在按下按钮时更改元素(称为trackListSideBar)的宽度,但没有成功.我设法实现了一些有比例的动画,但这也扩大了内容的规模.

以下是我的XAML代码:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             xmlns:converters="clr-namespace:Solution.MobileApp.Converters"
             xmlns:viewModels="clr-namespace:Solution.MobileApp.ViewModels"
             x:Class="Solution.MobileApp.Pages.Tabs.PlayerPage"
             x:DataType="viewModels:PlayerPageViewModel"
             Title="wPlayer"
             BackgroundColor="Black"
             Shell.NavBarIsVisible="False"
             Unloaded="OnUnloaded">
  <ContentPage.Resources>
    <toolkit:TimeSpanToSecondsConverter x:Key="TimeSpanConverter" />
    <converters:SecondsToStringConverter x:Key="SecondsToStringConverter" />
  </ContentPage.Resources>

  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="0" />
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="1*"/>
      <ColumnDefinition Width="5*"/>
    </Grid.ColumnDefinitions>

    <Frame Grid.Row="0" Grid.RowSpan="5" Grid.Column="0"
           ZIndex="100"
           HeightRequest="600"
           x:Name="trackListSideBar">
      <ImageButton Source="song.png" Clicked="OnTrackListImageClicked" WidthRequest="50" HeightRequest="50" />
    </Frame>

    <toolkit:MediaElement
        Grid.Row="0"
        Grid.Column="1"
        x:Name="mediaElement"
        ShouldAutoPlay="True"
        Source="{Binding Source}"
        MediaEnded="OnMediaEnded"
        MediaFailed="OnMediaFailed"
        MediaOpened="OnMediaOpened"
        PositionChanged="OnPositionChanged"
        StateChanged="OnStateChanged"
        SeekCompleted="OnSeekCompleted" />

    <HorizontalStackLayout Grid.Row="1" Grid.Column="1" Padding="0,0,0,15">
      <Label HorizontalOptions="Center">
        <Label.Text>
          <MultiBinding StringFormat="Current State: {0}">
            <Binding Path="CurrentState" Source="{x:Reference mediaElement}" />
          </MultiBinding>
        </Label.Text>
      </Label>
    </HorizontalStackLayout>

    <Grid Grid.Row="2" Grid.Column="1" Padding="0,10,0,10" ColumnDefinitions="*,*,*,*" ColumnSpacing="5">
      <ImageButton Grid.Column="0" Source="back.png" Clicked="OnPreviousClicked" HeightRequest="50" WidthRequest="50" />
      <ImageButton Grid.Column="1" Source="play.png" Clicked="OnPlayOrPauseClicked" HeightRequest="50" WidthRequest="50">
        <ImageButton.Triggers>
          <DataTrigger TargetType="ImageButton"
                       Binding="{Binding CurrentState, Source={x:Reference mediaElement}}"
                       Value="Playing">
            <Setter Property="Source" Value="pause.png" />
          </DataTrigger>
          <DataTrigger TargetType="ImageButton"
                       Binding="{Binding CurrentState, Source={x:Reference mediaElement}}"
                       Value="Paused">
            <Setter Property="Source" Value="play.png" />
          </DataTrigger>
          <DataTrigger TargetType="ImageButton"
                       Binding="{Binding CurrentState, Source={x:Reference mediaElement}}"
                       Value="None">
            <Setter Property="Source" Value="play.png" />
          </DataTrigger>
        </ImageButton.Triggers>
      </ImageButton>
      <ImageButton Grid.Column="2" Source="stop.png" Clicked="OnStopClicked" HeightRequest="50" WidthRequest="50" />
      <ImageButton Grid.Column="3" Source="forward.png" Clicked="OnNextClicked" HeightRequest="50" WidthRequest="50" />
    </Grid>

    <VerticalStackLayout Grid.Row="3" Grid.Column="1" Padding="0,10,0,10">
      <Slider x:Name="positionSlider"
              MinimumTrackColor="Gray"
              DragStarted="OnSliderDragStarted"
              DragCompleted="OnSliderDragCompleted"/>

      <HorizontalStackLayout Padding="0,10,0,10">
        <Label HorizontalOptions="Center">
          <Label.Text>
            <MultiBinding StringFormat="{}Position: {0}/{1}">
              <Binding Path="Position" Source="{x:Reference mediaElement}" Converter="{StaticResource SecondsToStringConverter}" />
              <Binding Path="Duration" Source="{x:Reference mediaElement}" Converter="{StaticResource SecondsToStringConverter}" />
            </MultiBinding>
          </Label.Text>
        </Label>
      </HorizontalStackLayout>
    </VerticalStackLayout>

    <Grid Grid.Row="4" Grid.Column="1" Padding="0,10,0,10" RowDefinitions="*,*" ColumnDefinitions="*,*" ColumnSpacing="5">
      <Label Grid.Column="0" Grid.Row="0">
        <Label.FormattedText>
          <FormattedString>
            <Span Text="Volume:" />
            <Span Text="{Binding Source={x:Reference mediaElement}, Path=Volume, StringFormat='{}{0:P0}'}" />
          </FormattedString>
        </Label.FormattedText>
      </Label>
      <Slider Grid.Column="0" Grid.Row="1" 
              Maximum="1.0"
              Minimum="0.0"
              MinimumTrackColor="Red"
              MaximumTrackColor="Gray"
              Margin="10,0,10,0">
        <Slider.Value>
          <Binding Path="Volume" Source="{x:Reference mediaElement}" />
        </Slider.Value>
      </Slider>
      <ImageButton Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"
                   HeightRequest="50" WidthRequest="50"
                   Source="mute.png"
                   Clicked="OnMuteClicked">
        <ImageButton.Triggers>
          <DataTrigger TargetType="ImageButton"
                       Binding="{Binding ShouldMute, Source={x:Reference mediaElement}}"
                       Value="True">
            <Setter Property="Source" Value="sound.png" />
          </DataTrigger>
          <DataTrigger TargetType="ImageButton"
                       Binding="{Binding ShouldMute, Source={x:Reference mediaElement}}"
                       Value="False">
            <Setter Property="Source" Value="mute.png" />
          </DataTrigger>
        </ImageButton.Triggers>
      </ImageButton>
    </Grid>
  </Grid>
</ContentPage>

因此,我正在努力处理按钮事件处理程序或动画.

推荐答案

在.NET Maui中,您可以在代码隐藏中创建custom animations:

private async void OnTrackListImageClicked(object sender, EventArgs args)
{
    await MainThread.InvokeOnMainThreadAsync(() => {
        var animation = new Animation(v => trackListSideBar.WidthRequest = v, 50, 200);
        animation.Commit(this, "TrackListSideBarAnimation", 16, 1000, Easing.CubicIn);
    });
}

这将创建一个持续时间为1秒的动画,并将trackListSideBarWidthRequest从50个单位更改为200个单位.

Csharp相关问答推荐

[0-n]范围内有多少个Integer在其小数表示中至少包含一个9?

System.文本.Json现在总是需要无参数构造函数吗?

C#中的包版本控制

读取配置文件(mytest. exe. config)

为什么C#Bigbit不总是相同的比特长度?

安装附加的. exe与Visual Studio

如何使datagridview的列具有响应性,以便不是所有列都更改其宽度

如何测量在使用UTF8而不是C#中的UTF16编码字符串时内存使用量的增长

Thad.Sept()vs Task.Delay().Wait()

注册所有IMediatR类

StackExchange.Redis.RedisServerException:调用ITransaction.ExecuteAsync()时出现错误未知命令取消监视

UWP应用程序try 将打包的本机.exe文件加载为C#程序集

反序列化私有成员

如何在NET 8最小API中自动记录TypedResults.Stream响应

JsonSchema.Net删除假阳性判断结果

基于C#和ANGING的SignalR实时聊天流媒体应用

使用C#和.NET 7.0无法访问Cookie中的数据

FakeItEasy自动嘲弄内容

Azure队列触发器未使用隔离的工作进程执行

使用postman 测试配置了身份的.NET 6应用程序