Browse Source

still working on format bar positioning, what a pain!

pull/1645/head
brianlagunas_cp 16 years ago
parent
commit
ec18e6d0f8
  1. 19
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/RichTextBoxFormatBarManager.cs

19
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/RichTextBoxFormatBarManager.cs

@ -93,7 +93,7 @@ namespace Microsoft.Windows.Controls
_adorner = new UIElementAdorner<Control>(_richTextBox); _adorner = new UIElementAdorner<Control>(_richTextBox);
formatBar.RichTextBox = _richTextBox; formatBar.RichTextBox = _richTextBox;
_toolbar = formatBar; _toolbar = formatBar;
} }
/// <summary> /// <summary>
@ -116,28 +116,21 @@ namespace Microsoft.Windows.Controls
/// <param name="adorningEditor"></param> /// <param name="adorningEditor"></param>
private void PositionFormatBar(Control adorningEditor) private void PositionFormatBar(Control adorningEditor)
{ {
Rect wordBoundary = _richTextBox.Selection.End.GetPositionAtOffset(0, LogicalDirection.Backward).GetCharacterRect(LogicalDirection.Backward); Point mousePosition = Mouse.GetPosition(_richTextBox);
double left = wordBoundary.X; double left = mousePosition.X;
double top = (wordBoundary.Y + wordBoundary.Height) - adorningEditor.ActualHeight; double top = (mousePosition.Y - 15) - adorningEditor.ActualHeight;
//top boundary //top
if (top < 0) if (top < 0)
{ {
top = wordBoundary.Y + wordBoundary.Height; top = mousePosition.Y + 10;
} }
//right boundary //right boundary
if (left + adorningEditor.ActualWidth > _richTextBox.ActualWidth - 20) if (left + adorningEditor.ActualWidth > _richTextBox.ActualWidth - 20)
{ {
left = left - (adorningEditor.ActualWidth - (_richTextBox.ActualWidth - left)); left = left - (adorningEditor.ActualWidth - (_richTextBox.ActualWidth - left));
top = wordBoundary.Y + wordBoundary.Height + 5;
}
//bottom boundary
if (top + adorningEditor.ActualHeight > _richTextBox.ActualHeight - 20)
{
top = wordBoundary.Y - (adorningEditor.ActualHeight + wordBoundary.Height);
} }
_adorner.SetOffsets(left, top); _adorner.SetOffsets(left, top);

Loading…
Cancel
Save