Xamarin วิธีการโหลดภาพ contorol หากที่อยู่ Url เป็นภาพและถ้าวิดีโอรถโหลดวิดีโอควบคุม

0

คำถาม

ฉันกำลังพัฒนา Facebook เหมือนแหล่งป้อนหน้าที่ฉันมีรายชื่อของที่อยู่ url(วิดีโอและรูปภาพ) ยังไงฉันสามารถโหลดใน xaml งส่วนติดต่อผู้ควบคุมเจาะจงไปที่ที่อยู่ Url ประเภท(ของภาพหรือวีดีโอ).

ตัวอย่าง:

   ```<CollectionView ItemsSource="{Binding UrlList}">
            <Grid>
                If ( url is image)


                <Image Source="{Binding Url}"/>

                If ( url is video )

                <MediaElement Source="{Binding Url}" />
            </Grid>
     </CollectionView>```
controls forms xamarin xamarin.forms
2021-11-12 17:41:00
1

คำตอบที่ดีที่สุด

0

ใช่คุณสามารถใช้ DataTemplateSelector จะประสบความสำเร็จในส่วนี้

เป็ DataTemplateSelector สามารถใช้ในการเลือก DataTemplate ตอน runtime จากค่าของข้อมูล-ผูกริมทรัพย์ นี่เปิดใช้หลาย DataTemplates จะถูกปรับใช้ยาชนิดเดียวกับวัตถุต้องการปรับแต่งรูปลักษณ์ของพิเศษวัตถุ.

1.สร้าง DataTemplateSelector

เป็นข้อมูลของต้นแบบรับเทียบข้อมูลอัตโนมัติคือการจัดเตรียมไว้โดยสร้างชั้นเรียนนั่น inherits จาก DataTemplateSelector. คน OnSelectTemplate วิธีการเป็นงั้น overridden ต้องกลับมาเป็นพิเศษ DataTemplate.

คุณสามารถเรียงตามรหัส:

public class UrlTemplateSelector : DataTemplateSelector
{
    public DataTemplate ImageTemplate { get; set; }

    public DataTemplate VideoTemplate { get; set; }

    public DataTemplate OtherTemplate { get; set; }

    protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
    {
        ItemModel model = (ItemModel)item;

        if (model.Url.EndsWith(".mp4")|| model.Url.EndsWith(".avi")|| model.Url.EndsWith(".rmvb")) // you can add multiple video file suffixes
        {
            return VideoTemplate;

        }
        else if (model.Url.EndsWith(".png")|| model.Url.EndsWith(".bmp") || model.Url.EndsWith(".jpg"))//you can add multiple image file suffixes
        {
            return ImageTemplate;
        }
        else {
            return OtherTemplate;
        }
    }
}

ว่า ItemModel คือ binded กอันเราเจอมันถูกซ่อนอยู่

public class ItemModel
{
    public string Name { get; set; }
    public string Url { get; set; }
}

2. การใช้(คิดว่าเพจเป็น TestPage)

TestPage.xaml

<ContentPage.Resources>
    <ResourceDictionary>
        <DataTemplate x:Key="imageTemplate">
            <ViewCell>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0.4*" />
                        <ColumnDefinition Width="0.6*" />
                    </Grid.ColumnDefinitions>
                    <Label Text="{Binding Name}" TextColor="Green" FontAttributes="Bold" />
                    <Image Grid.Column="1" Source="{Binding Url}"  />
                </Grid>
            </ViewCell>
        </DataTemplate>
        <DataTemplate x:Key="videoTemplate">
            <ViewCell>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0.4*" />
                        <ColumnDefinition Width="0.6*" />
                    </Grid.ColumnDefinitions>
                    <Label Text="{Binding Name}" TextColor="Red" FontAttributes="Bold" />
                <behaviors:MediaElement  Grid.Column="1" Source="{Binding Url}"  />
                </Grid>
            </ViewCell>
        </DataTemplate>
    <local:UrlTemplateSelector x:Key="mediaUrlTemplateSelector" ImageTemplate="{StaticResource imageTemplate}" VideoTemplate="{StaticResource videoTemplate}" />
    </ResourceDictionary>
</ContentPage.Resources>
<StackLayout Margin="20">
    <Label Text="ListView with a DataTemplateSelector" FontAttributes="Bold" HorizontalOptions="Center" />
<ListView x:Name="listView" Margin="0,20,0,0" ItemTemplate="{StaticResource mediaUrlTemplateSelector}" />
</StackLayout>

สำหรับมากกรายละเอียด,คุณสามารถตรวจสอบ:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/selector.

และนั้นคือตัวอย่างรวมอยู่ในเอกสารอยู่เหนือคุณสามารถลองมัน

2021-11-15 02:42:45

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................