/// <summary> Запуск предпросмотра по наведению на ковер. </summary> private void OnMousePreviewEnter(object sender, MouseEventArgs e) { // если предпросмотр отключен if (!Properties.Settings.Default.PreviewEnabled) { return; } var entry = DataContext as AbstractEntry; if (entry == null | entry.BaseEntry == null || !entry.BaseEntry.EntAbsFile.Exists) { return; } Task.Delay(Properties.Settings.Default.PreviewStartDelay).ContinueWith((task) => { Dispatcher.BeginInvoke((Action)(() => { if (LeftPreviewDecorator.IsMouseOver) { // определяем метод отрисовки предпросмотра и формируем нужную панель switch (Properties.Settings.Default.PreviewMode) { case "WPF": { if (pfWPF == null) { pfWPF = new PreviewFrameWPF(); previewGrid.Children.Clear(); previewGrid.Children.Add(pfWPF); } pfWPF?.StartPreview(entry.BaseEntry.EntAbsFile.FullName, entry.BaseEntry.duration); break; } case "FFME": { if (!App.FoundFFMpegLibs) { break; } if (pfFFME == null) { pfFFME = new PreviewFrameFFME(); previewGrid.Children.Clear(); previewGrid.Children.Add(pfFFME); } pfFFME?.StartPreview(entry.BaseEntry.EntAbsFile.FullName, entry.BaseEntry.duration); break; } default: { break; } } TurnOnPreviewMode(); } })); }); }
/// <summary> Прячем и останавливаем предпросмотр. </summary> private void OnMousePreviewLeave(object sender, MouseEventArgs e) { TurnOffPreviewMode(); pfWPF?.StopPreview(); pfFFME?.StopPreview(); previewGrid.Children.Clear(); pfWPF = null; pfFFME = null; }
///<summary> Убрали мышь с плитки - снимаем обводку, прячем и останавливаем предпросмотр. </summary> protected override void OnMouseLeave(MouseEventArgs e) { base.OnMouseLeave(e); border.BorderBrush = tempColor; TurnOffPreviewMode(); pfWPF?.StopPreview(); pfFFME?.StopPreview(); previewGrid.Children.Clear(); pfWPF = null; pfFFME = null; }