2009-05-12 3 views
0

Я хотел бы иметь холст, который поддерживает событие DragDelta. Моя первая идея, как это сделать, - создать ControlTemplate с большим пальцем. Но я не знаю, как это сделать правильно. Как я могу изменить XAML ниже, чтобы скомпилировать его, и как правильно установить обработчик событий DragDelta?WPF: Как установить поведение большого пальца на холсте?

<UserControl.Resources> 
    <ControlTemplate x:Key="Transparent"> 
     <Rectangle Fill="Transparent"/> 
    </ControlTemplate> 
    <ControlTemplate x:Key="ThumbCanvas" TargetType="{x:Type Canvas}"> 
     <Grid> 
      <Thumb x:Name="CanvasThumb" Template="{StaticResource Transparent}" DragDelta="CanvasThumb_DragDelta"/> 
      <ContentPresenter Content="{TemplateBinding Content}"/> 
      <!--error MC3011: Cannot find the static member 'ContentProperty' on the type 'Canvas'.--> 
     </Grid> 
    </ControlTemplate> 
</UserControl.Resources> 

ответ

1

Любой элемент управления, построенный на панели, не имеет свойства шаблона, поскольку у них нет видимых компонентов.

Вы можете использовать управление Thumb внутри UserControl, как вы делаете, и просто отрегулировать высоту/ширину UserControl на основе дельты Thumb. Чтобы сделать эту работу правильно, вам нужно получить местоположение мыши относительно родителя usercontrol, иначе это не сработает. т.е.: e.GetLocation (this.Parent);

Возможно, вы также должны определить высоту и ширину на этом большом пальце. Это также хорошая идея, чтобы установить на него курсор.

+0

Я предполагал, что если бы у меня просто был большой палец под холстом, чтобы холст получил событие мыши, а не большой палец. Нет? BTW, я не буду использовать большой палец для изменения размера, а просто для того, чтобы различать щелчок и перетаскивание на холст. – Qwertie

+0

Оказывается, Canvas не принимает события мыши (и они проходят), если для фона не задано значение. К сожалению, стандартные события MouseDown, MouseUp, MouseMove работают некорректно для меня при подключении обработчиков к Thumb ... – Qwertie

+0

Обновление: при прикреплении событий к Thumb мне приходится обрабатывать PreviewMouseDown и PreviewMouseMove вместо MouseDown и MouseMove, так как Thumb блокирует регулярные события. – Qwertie