diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/UIElementAdorner.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/UIElementAdorner.cs similarity index 95% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/UIElementAdorner.cs rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/UIElementAdorner.cs index 7b601b47..263ca034 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/UIElementAdorner.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/UIElementAdorner.cs @@ -4,7 +4,7 @@ using System.Windows.Media; using System.Windows.Documents; using System.Windows; -namespace Microsoft.Windows.Controls.Formatting +namespace Microsoft.Windows.Controls.Core { /// /// An adorner that can display one and only one UIElement. diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/FormatToolbarManager.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/FormatToolbarManager.cs deleted file mode 100644 index 295e419a..00000000 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/FormatToolbarManager.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows; - -namespace Microsoft.Windows.Controls.Formatting -{ - internal class FormatToolbarManager - { - RichTextBox _richTextBox; - readonly UIElementAdorner _adorner; - FormatToolbar toolbar; - - bool AdornerIsVisible - { - get { return _adorner.Visibility == Visibility.Visible; } - } - - public FormatToolbarManager(RichTextBox richTextBox) - { - _richTextBox = richTextBox; - _adorner = new UIElementAdorner(richTextBox); - toolbar = new FormatToolbar(richTextBox); - AttachToRichtextBox(); - } - - private void AttachToRichtextBox() - { - _richTextBox.Selection.Changed += Selection_Changed; - } - - void Selection_Changed(object sender, EventArgs e) - { - TextRange selectedText = new TextRange(_richTextBox.Selection.Start, _richTextBox.Selection.End); - if (selectedText.Text.Length > 0) - { - VerifyAdorner(); - } - else - { - HideAdorner(); - } - } - - //TODO: refactor - void VerifyAdorner() - { - VerifyAdornerLayer(); - - Control adorningEditor = toolbar; - _adorner.Child = adorningEditor; - _adorner.Visibility = Visibility.Visible; - - Rect wordBoundary = _richTextBox.Selection.End.GetPositionAtOffset(0, LogicalDirection.Backward).GetCharacterRect(LogicalDirection.Backward); - - double left = wordBoundary.X; - double top = (wordBoundary.Y + wordBoundary.Height) - toolbar.ActualHeight; - - //top boundary - if (top < 0) - { - top = wordBoundary.Y + wordBoundary.Height; - } - - //right boundary - if (left + toolbar.ActualWidth > _richTextBox.ActualWidth - 20) - { - left = left - toolbar.ActualWidth; - top = wordBoundary.Y + wordBoundary.Height + 5; - } - - //bottom boundary - if (top + toolbar.ActualHeight > _richTextBox.ActualHeight - 20) - { - top = wordBoundary.Y - (toolbar.ActualHeight + wordBoundary.Height); - } - - _adorner.SetOffsets(left, top); - } - - /// - /// Ensures that the adorner is in the adorner layer. - /// - /// True if the adorner is in the adorner layer, else false. - bool VerifyAdornerLayer() - { - if (_adorner.Parent != null) - return true; - - AdornerLayer layer = AdornerLayer.GetAdornerLayer(_richTextBox); - if (layer == null) - return false; - - layer.Add(_adorner); - return true; - } - - void HideAdorner() - { - if (this.AdornerIsVisible) - { - _adorner.Visibility = Visibility.Collapsed; - _adorner.Child = null; - } - } - } -} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/RichTextBox.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/RichTextBox.cs index ff9c810d..c8015e32 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/RichTextBox.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/RichTextBox.cs @@ -2,7 +2,6 @@ using System.Windows; using System.Windows.Data; using System.Windows.Threading; -using Microsoft.Windows.Controls.Formatting; namespace Microsoft.Windows.Controls { @@ -12,7 +11,6 @@ namespace Microsoft.Windows.Controls private bool _textHasLoaded; private bool isInvokePending; - private FormatToolbarManager _manager; #endregion //Private Members @@ -33,28 +31,9 @@ namespace Microsoft.Windows.Controls #region Properties - #region AllowFormatting - - public static readonly DependencyProperty AllowFormatingProperty = DependencyProperty.Register("AllowFormating", typeof(bool), typeof(RichTextBox), new PropertyMetadata(false, new PropertyChangedCallback(OnAllowFormatingPropertyChanged))); - public bool AllowFormating - { - get { return (bool)GetValue(AllowFormatingProperty); } - set { SetValue(AllowFormatingProperty, value); } - } - - private static void OnAllowFormatingPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - RichTextBox rtb = (RichTextBox)d; - - if ((bool)e.NewValue) - rtb._manager = new FormatToolbarManager(rtb); - } - - #endregion //AllowFormatting - #region Text - public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(RichTextBox), new FrameworkPropertyMetadata(String.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnTextPropertyChanged), new CoerceValueCallback(CoerceTextProperty), true, System.Windows.Data.UpdateSourceTrigger.LostFocus)); + public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(RichTextBox), new FrameworkPropertyMetadata(String.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnTextPropertyChanged, CoerceTextProperty, true, UpdateSourceTrigger.LostFocus)); public string Text { get { return (string)GetValue(TextProperty); } diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/IRichTextBoxFormatBar.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/IRichTextBoxFormatBar.cs new file mode 100644 index 00000000..a39f4105 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/IRichTextBoxFormatBar.cs @@ -0,0 +1,9 @@ +using System; + +namespace Microsoft.Windows.Controls +{ + public interface IRichTextBoxFormatBar + { + global::System.Windows.Controls.RichTextBox RichTextBox { get; set; } + } +} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/Bold16.png b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/Bold16.png similarity index 100% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/Bold16.png rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/Bold16.png diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/CenterAlign16.png b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/CenterAlign16.png similarity index 100% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/CenterAlign16.png rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/CenterAlign16.png diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/Italic16.png b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/Italic16.png similarity index 100% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/Italic16.png rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/Italic16.png diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/JustifyAlign16.png b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/JustifyAlign16.png similarity index 100% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/JustifyAlign16.png rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/JustifyAlign16.png diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/LeftAlign16.png b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/LeftAlign16.png similarity index 100% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/LeftAlign16.png rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/LeftAlign16.png diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/RightAlign16.png b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/RightAlign16.png similarity index 100% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/RightAlign16.png rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/RightAlign16.png diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/Underline16.png b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/Underline16.png similarity index 100% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/Images/Underline16.png rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/Images/Underline16.png diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/FormatToolbar.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/RichTextBoxFormatBar.xaml similarity index 87% rename from ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/FormatToolbar.xaml rename to ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/RichTextBoxFormatBar.xaml index 314e9102..3c793a16 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBox/FormatToolbar/FormatToolbar.xaml +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/RichTextBoxFormatBar/RichTextBoxFormatBar.xaml @@ -1,7 +1,7 @@ - @@ -10,12 +10,29 @@ +