Ejemplo n.º 1
0
        /*
         *  テキストの変更をIMEに伝えます。
         */
        void MyNotifyTextChanged(int sel_start, int sel_end, int new_text_length)
        {
            CoreTextRange modifiedRange;

            modifiedRange.StartCaretPosition = sel_start;
            modifiedRange.EndCaretPosition   = sel_end;

            CoreTextRange new_range;

            new_range.StartCaretPosition = SelCurrent;
            new_range.EndCaretPosition   = SelCurrent;
            editContext.NotifyTextChanged(modifiedRange, new_text_length, new_range);
        }
Ejemplo n.º 2
0
        // Replace the text in the specified range.
        void ReplaceText(CoreTextRange modifiedRange, string text)
        {
            // Modify the internal text store.
            _text = _text.Substring(0, modifiedRange.StartCaretPosition) +
                    text +
                    _text.Substring(modifiedRange.EndCaretPosition);

            // Move the caret to the end of the replacement text.
            _selection.StartCaretPosition = modifiedRange.StartCaretPosition + text.Length;
            _selection.EndCaretPosition   = _selection.StartCaretPosition;

            // Update the selection of the edit context.  There is no need to notify the system
            // of the selection change because we are going to call NotifyTextChanged soon.
            SetSelection(_selection);

            // Let the CoreTextEditContext know what changed.
            _editContext.NotifyTextChanged(modifiedRange, text.Length, _selection);
        }
Ejemplo n.º 3
0
        /*
         *  キーが押された。
         */
        private void CoreWindow_KeyDown(CoreWindow sender, KeyEventArgs args)
        {
            Debug.WriteLine("<<--- Key Down {0}", args.VirtualKey);

            switch (args.VirtualKey)
            {
            case Windows.System.VirtualKey.Left: // 左矢印(←)キー

                // カーソルがあると文字の操作に邪魔なので、いったん取り除きます。
                RemoveCursor();

                if (0 < Selection.EndCaretPosition)
                {
                    // テキストの選択位置が左端でない場合

                    // テキストの選択位置を1つ左に移動します。
                    Selection.EndCaretPosition--;
                    Selection.StartCaretPosition = Selection.EndCaretPosition;

                    // IMEに選択位置の変更を知らせます。
                    Debug.WriteLine("--->> NotifySelectionChanged");
                    editContext.NotifySelectionChanged(Selection);
                }

                // カーソルを挿入します。
                InsertCursor();
                break;

            case Windows.System.VirtualKey.Right: // 右矢印(→)キー

                // カーソルがあると文字の操作に邪魔なので、いったん取り除きます。
                RemoveCursor();

                if (Selection.EndCaretPosition < EditText.Inlines.Count)
                {
                    // テキストの選択位置が右端でない場合

                    // テキストの選択位置を1つ右に移動します。
                    Selection.EndCaretPosition++;
                    Selection.StartCaretPosition = Selection.EndCaretPosition;

                    // IMEに選択位置の変更を知らせます。
                    Debug.WriteLine("--->> NotifySelectionChanged");
                    editContext.NotifySelectionChanged(Selection);
                }

                // カーソルを挿入します。
                InsertCursor();
                break;


            case Windows.System.VirtualKey.Delete: // Deleteキー

                // カーソルがあると文字の操作に邪魔なので、いったん取り除きます。
                RemoveCursor();

                if (Selection.EndCaretPosition < EditText.Inlines.Count)
                {
                    // テキストの選択位置が右端でない場合

                    // テキストの選択位置の文字を1つ削除します。
                    EditText.Inlines.RemoveAt(Selection.EndCaretPosition);

                    // 削除前のテキストの選択位置をセットします。
                    CoreTextRange modified_range;
                    modified_range.StartCaretPosition = Selection.EndCaretPosition;
                    modified_range.EndCaretPosition   = Selection.EndCaretPosition + 1;

                    // 削除後のテキストの選択位置をセットします。
                    Selection.StartCaretPosition = Selection.EndCaretPosition;

                    // IMEにテキストの変更を知らせます。
                    Debug.WriteLine("--->> NotifyTextChanged");
                    editContext.NotifyTextChanged(modified_range, 0, Selection);
                }

                // カーソルを挿入します。
                InsertCursor();
                break;
            }
        }