如何定义从Rectangle类驱动的自定义Rectangle类?

时间:2013-05-12 16:40:26

标签: wpf derived-class rectangles

我已在WPF中编写了自定义RichTextBox类。但我需要在RichTextBox的左上角有一个小矩形,以便在我想拖动RichTextBox时我可以将它用作拖动手柄。 所以我开始是这样的:

public class DragHandleRegtangle : Shape
    {
        public double len = 5;
        public double wid = 5;

        public DragHandleRegtangle()
        {
           //what should be here exactly, anyway? 
        }
    }
//Here goes my custom RichTextBox
public class CustomRichTextBox : RichTextBox
...

但我不知道如何指定它的宽度/长度/填充颜色,最重要的是它与RichTextBox相关的位置(与RichTextBox的锚点正好相关的零 - 即:它的左上角)

到目前为止我遇到的第一个错误是:

  

'ResizableRichTextBox.DragHandleRegtangle'未实现   继承了抽象成员   'System.Windows.Shapes.Shape.DefiningGeometry.get'

如果有人可以帮我定义矩形并解决此错误,我会很感激。

2 个答案:

答案 0 :(得分:2)

将此内容写入您的代码

   protected override System.Windows.Media.Geometry DefiningGeometry
   {
      //your code
   }

答案 1 :(得分:1)

WPF框架有一个类可以满足您的需求。 Thumb类表示允许用户拖动和调整控件大小的控件。它通常在制作自定义控件时使用。 MSDN Docs for Thumb class

以下是如何实例化拇指并连接一些拖动处理程序。

private void SetupThumb () {
  // the Thumb ...represents a control that lets the user drag and resize controls."
  var t = new Thumb();
  t.Width = t.Height = 20;
  t.DragStarted += new DragStartedEventHandler(ThumbDragStarted);
  t.DragCompleted += new DragCompletedEventHandler(ThumbDragCompleted);
  t.DragDelta += new DragDeltaEventHandler(t_DragDelta);
  Canvas.SetLeft(t, 0);
  Canvas.SetTop(t, 0);
  mainCanvas.Children.Add(t);
}

private void ThumbDragStarted(object sender, DragStartedEventArgs e)
{
  Thumb t = (Thumb)sender;
  t.Cursor = Cursors.Hand;
}

private void ThumbDragCompleted(object sender,      DragCompletedEventArgs e)
{
  Thumb t = (Thumb)sender;
  t.Cursor = null;
}
void t_DragDelta(object sender, DragDeltaEventArgs e)
{
  var item = sender as Thumb;

  if (item != null)
  {
    double left = Canvas.GetLeft(item);
    double top = Canvas.GetTop(item);

    Canvas.SetLeft(item, left + e.HorizontalChange);
    Canvas.SetTop(item, top + e.VerticalChange);
  }

}