public EditTranslationDialog(TranslationItem translationItem, Action<TranslationItem> callback, FrameworkElement owinElement = null)
        {
            InitializeComponent();

            if (translationItem == null || callback == null)
            {
                DialogResult = null;
                Close();
                return;
            }

            _title = Title;

            if (owinElement != null)
            {
                try
                {
                    var pointFromScreen = owinElement.PointToScreen(new Point(-5, 0));
                    WindowStartupLocation = WindowStartupLocation.Manual;
                    var top = pointFromScreen.Y;
                    var left = pointFromScreen.X;
                    Top = top > 0 ? top : Top;
                    Left = left > 0 ? left : Left;
                    MaxHeight = SystemParameters.PrimaryScreenHeight - Top - 50;
                    Width = owinElement.ActualWidth + 50;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }

            _originalText = translationItem.TextWithOverflow;
            TranslationTextBox.Text = translationItem.TextWithOverflow;
            TranslationTextBox.TextChanged += (sender, args) =>
            {
                var changed = string.Compare(_originalText, TranslationTextBox.Text, StringComparison.InvariantCulture) != 0;
                Title = changed ? _title + "*" : _title;
            };

            TranslationTextBox.Focus();
            var caretIndex = TranslationTextBox.Text.Length;
            if(caretIndex > -1)
                TranslationTextBox.CaretIndex = caretIndex;
            TranslationTextBox.ScrollToEnd();

            CancelButton.Click += (sender, args) =>
            {
                DialogResult = false;
                Close();
            };

            ReplaceButton.Click += (sender, args) =>
            {
                var item = new TranslationItem(translationItem) {Text = TranslationTextBox.Text};
                DialogResult = true;
                callback(item);
                Close();
            };
        }
        public EditTranslationDialog(TranslationItem translationItem, Action <TranslationItem> callback, FrameworkElement owinElement = null)
        {
            InitializeComponent();

            if (translationItem == null || callback == null)
            {
                DialogResult = null;
                Close();
                return;
            }

            _title = Title;

            if (owinElement != null)
            {
                try
                {
                    var pointFromScreen = owinElement.PointToScreen(new Point(-5, 0));
                    WindowStartupLocation = WindowStartupLocation.Manual;
                    var top  = pointFromScreen.Y;
                    var left = pointFromScreen.X;
                    Top       = top > 0 ? top : Top;
                    Left      = left > 0 ? left : Left;
                    MaxHeight = SystemParameters.PrimaryScreenHeight - Top - 50;
                    Width     = owinElement.ActualWidth + 50;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }

            _originalText                   = translationItem.TextWithOverflow;
            TranslationTextBox.Text         = translationItem.TextWithOverflow;
            TranslationTextBox.TextChanged += (sender, args) =>
            {
                var changed = string.Compare(_originalText, TranslationTextBox.Text, StringComparison.InvariantCulture) != 0;
                Title = changed ? _title + "*" : _title;
            };

            TranslationTextBox.Focus();
            var caretIndex = TranslationTextBox.Text.Length;

            if (caretIndex > -1)
            {
                TranslationTextBox.CaretIndex = caretIndex;
            }
            TranslationTextBox.ScrollToEnd();

            CancelButton.Click += (sender, args) =>
            {
                DialogResult = false;
                Close();
            };

            ReplaceButton.Click += (sender, args) =>
            {
                var item = new TranslationItem(translationItem)
                {
                    Text = TranslationTextBox.Text
                };
                DialogResult = true;
                callback(item);
                Close();
            };
        }