[英]Wpf Custom Media element
大家好,我在wpf方面還是很環保的,所以我需要一點幫助,這是我想要做的。
我想創建一個自定義媒體元素,我希望能夠加載視頻並播放15秒到1分鍾的視頻,我希望能夠根據用戶設置在加載時動態設置該元素。 我實際上是將大量視頻加載到列表視圖控件中,並且我希望視頻能夠播放,但是我試圖通過僅播放視頻的小預覽來節省資源。
我研究過的事情
我真的不確定下一步要去哪里。 我會很感激您能給我的任何幫助。
考慮到您對需求的評論,建議您使用普通的MediaElement,但為它分配視頻的“預覽”版本,該版本僅包含您要顯示的片段,並降低了分辨率,以減少負載占用。
因此,您的模型將具有兩個屬性,例如PreviewUri和SourceUri。 在PreviewUri,您可以存儲視頻的“預覽”版本; 在SourceUri,您存儲“完整”版本。 在ListBox或ItemsControl中,將使用綁定到PreviewUri的MediaElement。 當用戶進行選擇時,將主MediaElement的Source設置為SourceUri。 因此,您的ListBox將如下所示:
<ListBox ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<MediaElement Source="{Binding PreviewUri}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您的模型將如下所示:
public class Video // ideally implement INotifyPropertyChanged - not shown
{
public Uri PreviewUri { get; set; }
public Uri SourceUri { get; set; }
public static ObservableCollection<Video> LoadVideoInfo()
{
/* pseudocode
new up a collection
foreach (file in videoFolder)
collection.Add(new Video { PreviewUri = smallFileUri, SourceUri = bigFileUri });
return collection;
*/
}
}
您后面的代碼將如下所示:
DataContext = Video.LoadVideoInfo();
完整尺寸視頻的顯示方式取決於您要觸發的內容以及完整尺寸視頻的顯示位置。 使用ListBox而不是循環並將子代添加到StackPanel可能會對此有所幫助,因為您可以使用SelectedItemChanged事件,將數據綁定到SelectedItem或使用IsSynchronizedWithCurrentItem屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.