我有一个留言板列表视图,其中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中显示视频的替代方式。
感谢任何帮助
1条答案
按热度按时间l7wslrjt1#
正如Jason所指出的,您可以将
IsVisible
绑定到VideoPath
,这意味着如果您不将视频路径分配给MediaElement
,则MediaElement
将不可见(没有大黑盒)。