Browse Source

Setter methods for implementing a custom HitTestFilterCallback

pull/315/head
tbulle 12 years ago
parent
commit
c22443ba71
  1. 17
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
  2. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs
  3. 6
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs
  4. 7
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs
  5. 9
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs

17
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs

@ -86,12 +86,15 @@ namespace ICSharpCode.WpfDesign.Designer @@ -86,12 +86,15 @@ namespace ICSharpCode.WpfDesign.Designer
return;
}
// First try hit-testing on the adorner layer.
bool continueHitTest = true;
HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? FilterHitTestInvisibleElements;
CustomHitTestFilterBehavior = null;
if (testAdorners) {
RunHitTest(
_adornerLayer, mousePosition, FilterHitTestInvisibleElements,
_adornerLayer, mousePosition, filterBehavior,
delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
@ -110,14 +113,14 @@ namespace ICSharpCode.WpfDesign.Designer @@ -110,14 +113,14 @@ namespace ICSharpCode.WpfDesign.Designer
}
});
}
if (continueHitTest && testDesignSurface) {
RunHitTest(
this.Child, mousePosition, FilterHitTestInvisibleElements,
this.Child, mousePosition, filterBehavior,
delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
ViewService viewService = _context.Services.View;
DependencyObject obj = result.VisualHit;
while (obj != null) {
@ -165,6 +168,8 @@ namespace ICSharpCode.WpfDesign.Designer @@ -165,6 +168,8 @@ namespace ICSharpCode.WpfDesign.Designer
#region Properties
//Set custom HitTestFilterCallbak
public HitTestFilterCallback CustomHitTestFilterBehavior { get; set; }
/// <summary>
/// Gets/Sets the design context.
/// </summary>

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid @@ -45,7 +45,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
public CategoriesCollection Categories { get; private set; }
public PropertyNodeCollection Events { get; private set; }
public EventHandler AggregatePropertiesUpdated;
public EventHandler AggregatePropertiesUpdated { get; set; }
private PropertyGridGroupMode _groupMode;

6
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs

@ -142,6 +142,12 @@ namespace ICSharpCode.WpfDesign.Designer.Services @@ -142,6 +142,12 @@ namespace ICSharpCode.WpfDesign.Designer.Services
return item;
}
public static bool AddItemWithCustomSizePosition(DesignItem container, Type createdItem, Size size, Point position)
{
CreateComponentTool cct = new CreateComponentTool(createdItem);
return AddItemWithCustomSize(container, cct.CreateItem(container.Context), position, size);
}
public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size)
{
CreateComponentTool cct = new CreateComponentTool(createdItem);

7
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs

@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
using System;
using System.Windows.Input;
using System.Windows.Media;
namespace ICSharpCode.WpfDesign.Designer.Services
{
// See IToolService for description.
@ -22,6 +22,11 @@ namespace ICSharpCode.WpfDesign.Designer.Services @@ -22,6 +22,11 @@ namespace ICSharpCode.WpfDesign.Designer.Services
});
}
public HitTestFilterCallback DesignPanelHitTestFilterCallback
{
set{ _designPanel.CustomHitTestFilterBehavior = value; }
}
public void Dispose()
{
if (_designPanel != null) {

9
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs

@ -6,6 +6,7 @@ using System.Collections.Generic; @@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.WpfDesign.Adorners;
@ -38,6 +39,10 @@ namespace ICSharpCode.WpfDesign @@ -38,6 +39,10 @@ namespace ICSharpCode.WpfDesign
/// </summary>
public interface IToolService
{
/// <summary>
/// Set custom HitTestFilterCallback for DesignPanel
/// </summary>
HitTestFilterCallback DesignPanelHitTestFilterCallback{ set; }
/// <summary>
/// Gets the 'pointer' tool.
/// The pointer tool is the default tool for selecting and moving elements.
@ -62,6 +67,10 @@ namespace ICSharpCode.WpfDesign @@ -62,6 +67,10 @@ namespace ICSharpCode.WpfDesign
public interface IDesignPanel : IInputElement
{
/// <summary>
/// Set a custom filter callback so that any element can be filtered out
/// </summary>
HitTestFilterCallback CustomHitTestFilterBehavior { get; set; }
/// <summary>
/// Gets the design context used by the DesignPanel.
/// </summary>
DesignContext Context { get; }

Loading…
Cancel
Save