private static void CreateEffectAdorner(DropInfo dropInfo) { var template = GetEffectAdornerTemplate(m_DragInfo.VisualSource, dropInfo.Effects, dropInfo.DestinationText); if (template != null) { var rootElement = RootElementFinder.FindRoot(dropInfo.VisualTarget ?? m_DragInfo.VisualSource); var adornment = new ContentPresenter(); adornment.Content = m_DragInfo.Data; adornment.ContentTemplate = template; EffectAdorner = new DragAdorner(rootElement, adornment, dropInfo.Effects); } }
private static void CreateDragAdorner(DropInfo dropInfo) { var dragInfo = dropInfo.DragInfo; var template = GetDropAdornerTemplate(dropInfo.VisualTarget) ?? GetDragAdornerTemplate(dragInfo.VisualSource); var templateSelector = GetDropAdornerTemplateSelector(dropInfo.VisualTarget) ?? GetDragAdornerTemplateSelector(dragInfo.VisualSource); UIElement adornment = null; var useDefaultDragAdorner = template == null && templateSelector == null && GetUseDefaultDragAdorner(dragInfo.VisualSource); var useVisualSourceItemSizeForDragAdorner = GetUseVisualSourceItemSizeForDragAdorner(dragInfo.VisualSource); if (useDefaultDragAdorner) { template = dragInfo.VisualSourceItem.GetCaptureScreenDataTemplate(dragInfo.VisualSourceFlowDirection); } if (template != null || templateSelector != null) { if (dragInfo.Data is IEnumerable && !(dragInfo.Data is string)) { if (!useDefaultDragAdorner && ((IEnumerable)dragInfo.Data).Cast <object>().Count() <= 10) { var itemsControl = new ItemsControl(); itemsControl.ItemsSource = (IEnumerable)dragInfo.Data; itemsControl.ItemTemplate = template; itemsControl.ItemTemplateSelector = templateSelector; itemsControl.Tag = dragInfo; if (useVisualSourceItemSizeForDragAdorner) { var bounds = VisualTreeHelper.GetDescendantBounds(dragInfo.VisualSourceItem); itemsControl.SetValue(FrameworkElement.MinWidthProperty, bounds.Width); } // The ItemsControl doesn't display unless we create a grid to contain it. // Not quite sure why we need this... var grid = new Grid(); grid.Children.Add(itemsControl); adornment = grid; } } else { var contentPresenter = new ContentPresenter(); contentPresenter.Content = dragInfo.Data; contentPresenter.ContentTemplate = template; contentPresenter.ContentTemplateSelector = templateSelector; contentPresenter.Tag = dragInfo; if (useVisualSourceItemSizeForDragAdorner) { var bounds = VisualTreeHelper.GetDescendantBounds(dragInfo.VisualSourceItem); contentPresenter.SetValue(FrameworkElement.MinWidthProperty, bounds.Width); contentPresenter.SetValue(FrameworkElement.MinHeightProperty, bounds.Height); } adornment = contentPresenter; } } if (adornment != null) { if (useDefaultDragAdorner) { adornment.Opacity = GetDefaultDragAdornerOpacity(dragInfo.VisualSource); } var rootElement = RootElementFinder.FindRoot(dropInfo.VisualTarget ?? dragInfo.VisualSource); DragAdorner = new DragAdorner(rootElement, adornment, GetDragAdornerTranslation(dragInfo.VisualSource)); } }
private static void CreateDragAdorner(DropInfo dropInfo) { var template = GetDragAdornerTemplate(m_DragInfo.VisualSource); var templateSelector = GetDragAdornerTemplateSelector(m_DragInfo.VisualSource); UIElement adornment = null; var useDefaultDragAdorner = GetUseDefaultDragAdorner(m_DragInfo.VisualSource); var useVisualSourceItemSizeForDragAdorner = GetUseVisualSourceItemSizeForDragAdorner(m_DragInfo.VisualSource); if (template == null && templateSelector == null && useDefaultDragAdorner) { var bs = CaptureScreen(m_DragInfo.VisualSourceItem, m_DragInfo.VisualSourceFlowDirection); if (bs != null) { var factory = new FrameworkElementFactory(typeof(Image)); factory.SetValue(Image.SourceProperty, bs); factory.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased); factory.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.HighQuality); factory.SetValue(FrameworkElement.WidthProperty, bs.Width); factory.SetValue(FrameworkElement.HeightProperty, bs.Height); factory.SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Left); factory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top); template = new DataTemplate { VisualTree = factory }; } } if (template != null || templateSelector != null) { if (m_DragInfo.Data is IEnumerable && !(m_DragInfo.Data is string)) { if (!useDefaultDragAdorner && ((IEnumerable)m_DragInfo.Data).Cast <object>().Count() <= 10) { var itemsControl = new ItemsControl(); itemsControl.ItemsSource = (IEnumerable)m_DragInfo.Data; itemsControl.ItemTemplate = template; itemsControl.ItemTemplateSelector = templateSelector; if (useVisualSourceItemSizeForDragAdorner) { var bounds = VisualTreeHelper.GetDescendantBounds(m_DragInfo.VisualSourceItem); itemsControl.SetValue(FrameworkElement.MinWidthProperty, bounds.Width); } // The ItemsControl doesn't display unless we create a grid to contain it. // Not quite sure why we need this... var grid = new Grid(); grid.Children.Add(itemsControl); adornment = grid; } } else { var contentPresenter = new ContentPresenter(); contentPresenter.Content = m_DragInfo.Data; contentPresenter.ContentTemplate = template; contentPresenter.ContentTemplateSelector = templateSelector; if (useVisualSourceItemSizeForDragAdorner) { var bounds = VisualTreeHelper.GetDescendantBounds(m_DragInfo.VisualSourceItem); contentPresenter.SetValue(FrameworkElement.MinWidthProperty, bounds.Width); contentPresenter.SetValue(FrameworkElement.MinHeightProperty, bounds.Height); } adornment = contentPresenter; } } if (adornment != null) { if (useDefaultDragAdorner) { adornment.Opacity = GetDefaultDragAdornerOpacity(m_DragInfo.VisualSource); } var rootElement = RootElementFinder.FindRoot(dropInfo.VisualTarget ?? m_DragInfo.VisualSource); DragAdorner = new DragAdorner(rootElement, adornment); } }
private static void CreateDragAdorner() { var template = GetDragAdornerTemplate(m_DragInfo.VisualSource); var templateSelector = GetDragAdornerTemplateSelector(m_DragInfo.VisualSource); UIElement adornment = null; var useDefaultDragAdorner = GetUseDefaultDragAdorner(m_DragInfo.VisualSource); if (template == null && templateSelector == null && useDefaultDragAdorner) { var bs = CaptureScreen(m_DragInfo.VisualSourceItem, m_DragInfo.VisualSourceFlowDirection); if (bs != null) { var factory = new FrameworkElementFactory(typeof(Image)); factory.SetValue(Image.SourceProperty, bs); factory.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased); factory.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.HighQuality); factory.SetValue(FrameworkElement.WidthProperty, bs.Width); factory.SetValue(FrameworkElement.HeightProperty, bs.Height); factory.SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Left); factory.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top); template = new DataTemplate { VisualTree = factory }; } } if (template != null || templateSelector != null) { if (m_DragInfo.Data is IEnumerable && !(m_DragInfo.Data is string)) { if (!useDefaultDragAdorner && ((IEnumerable)m_DragInfo.Data).Cast <object>().Count() <= 10) { var itemsControl = new ItemsControl(); itemsControl.ItemsSource = (IEnumerable)m_DragInfo.Data; itemsControl.ItemTemplate = template; itemsControl.ItemTemplateSelector = templateSelector; // The ItemsControl doesn't display unless we create a border to contain it. // Not quite sure why this is... var border = new Border(); border.Child = itemsControl; adornment = border; } } else { var contentPresenter = new ContentPresenter(); contentPresenter.Content = m_DragInfo.Data; contentPresenter.ContentTemplate = template; contentPresenter.ContentTemplateSelector = templateSelector; adornment = contentPresenter; } } if (adornment != null) { if (useDefaultDragAdorner) { adornment.Opacity = GetDefaultDragAdornerOpacity(m_DragInfo.VisualSource); } var rootElement = RootElementFinder.FindRoot(m_DragInfo.VisualSource); // i don't want the fu... windows forms reference // if (rootElement == null) { // var elementHost = m_DragInfo.VisualSource.GetVisualAncestor<ElementHost>(); // rootElement = elementHost != null ? elementHost.Child : null; // } if (rootElement == null) { rootElement = m_DragInfo.VisualSource.GetVisualAncestor <UserControl>(); } DragAdorner = new DragAdorner(rootElement, adornment); } }