XAML 如何只显示媒体元素,而它有东西在它?

p5cysglq  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(124)

我有一个留言板列表视图,其中3种类型的消息可以张贴到它-文本,照片和视频。
每当提交消息时,都会根据类型创建MessageModel。所有类型都将具有Sender和Message Text,照片将具有PhotoPath,视频将具有VideoPath。

public string Sender { get; set; }
public string MessageText { get; set; }
public string ImagePath { get; set; }
public string VideoPath { get; set; }

下面是我的XAML的留言板-

<ContentPage.Content>
        <StackLayout BackgroundColor="{StaticResource AppBackgroundColor}">
            <ListView x:Name="MessageFeed" SelectionMode="None" SeparatorVisibility="Default" SeparatorColor="{StaticResource AppBackgroundColor}" HasUnevenRows="True" VerticalOptions="FillAndExpand" Margin="10">
                <ListView.Header>
                    <Label Text="Message Board" TextColor="{StaticResource AppTextColor}" FontAttributes="Bold" FontSize="24" Padding="0,25" HorizontalOptions="Center" HorizontalTextAlignment="Center"/>
                </ListView.Header>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid BackgroundColor="{StaticResource MessageBackgroundColor}"  Margin="0,0,0,10">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*" />
                                </Grid.RowDefinitions>
                                <StackLayout BackgroundColor="{StaticResource MessageBackgroundColor}" Margin="10,5,0,10">
                                    <Label Text="{Binding Sender, StringFormat='{}Posted by {0}'}" TextColor="{StaticResource AppTextColor}" FontSize="16" FontAttributes="Bold" Padding="25,0" />
                                    <Image Source="{Binding ImagePath}" HorizontalOptions="Center"/>
                                    <xct:MediaElement Source="{Binding VideoPath}" AutoPlay="False" ShowsPlaybackControls="True" HeightRequest="100" />
                                    <Label Text="{Binding MessageText}" TextColor="{StaticResource AppTextColor}" FontSize="14"/>
                                </StackLayout>
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>

我的问题是通过Xamarin.CommunityToolkit(2.0.5)的MediaElement。该元素需要设置一个高度值,否则它永远不会显示-即使有视频。然而,如果我设置了一个高度值,这将在每个列表视图项上显示为一个没有视频的大黑框。
有人知道如何在VideoPath包含值时只显示MediaElement HeightRequest吗?我不能使用x:Name来定位它,因为它在ListView中,我完全不知道如何继续。
我也愿意接受任何在Xamarin中显示视频的替代方式。
感谢任何帮助

l7wslrjt

l7wslrjt1#

正如Jason所指出的,您可以将IsVisible绑定到VideoPath,这意味着如果您不将视频路径分配给MediaElement,则MediaElement将不可见(没有大黑盒)。

<ContentPage.Resources> 
    <ResourceDictionary>
       <xct:IsNotNullOrEmptyConverter x:Key="IsNotNullOrEmptyConverter"/>
    </ResourceDictionary>
</ContentPage.Resources>

<xct:MediaElement 
Source="{Binding VideoPath}" 
AutoPlay="False" 
ShowsPlaybackControls="True" 
HeightRequest="100" 
IsVisible = "{Binding VideoPath,Converter= {StaticResource IsNotNullOrEmptyConverter}}"/>

相关问题