我已在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'
如果有人可以帮我定义矩形并解决此错误,我会很感激。
答案 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);
}
}