private TextControlSelection GetSelection()
        {
            var selection =
                AttachedFrameworkElement.GetValue <TextSelection>("Selection",
                                                                  BindingFlags.NonPublic | BindingFlags.Instance);
            var textRangeType = selection.GetType().GetInterfaces().FirstOrDefault(x => x.Name == "ITextRange");

            var startTextPointer  = textRangeType.GetValue <object>(selection, "Start");
            var endEndTextPointer = textRangeType.GetValue <object>(selection, "End");

            var start = startTextPointer.GetValue <int>("Offset", BindingFlags.Instance | BindingFlags.NonPublic);
            var end   = endEndTextPointer.GetValue <int>("Offset", BindingFlags.Instance | BindingFlags.NonPublic);

            return(new TextControlSelection
            {
                Start = start,
                End = end
            });
        }