[Silverlight] RichTextBox с кнопкой и фокус.
От: detox Россия  
Дата: 06.01.13 09:48
Оценка:
Доброго...

Есть примерно следующий XAML:

       <StackPanel>
            <StackPanel Orientation="Horizontal">
                <Button x:Name="PasteButton" Click="PasteButton_Click">
                    <Image Source="Paste_big.png" />
                </Button>               
            </StackPanel>            
            <RichTextBox GotFocus="RichTextBox_GotFocus">
            </RichTextBox>           
        </StackPanel>


Кнопка просто добавляет текст в RichTextBox.
По причине того, что при нажатии на кнопку RichTextBox теряет фокуса (его получает Button) пришлось их связать для того, чтобы вернуть фокус назад. Вот как выглядит код обработчиков:


        private void RichTextBox_GotFocus(object sender, RoutedEventArgs e)
        {                   
            PasteButton.Tag = sender;
        }

    private void PasteButton_Click(object sender, RoutedEventArgs e)
        {               
            if (((Button)sender).Tag != null)
            {
                ((RichTextBox)((Button)sender).Tag).Selection.Text = "Paste text";
                ((RichTextBox)((Button)sender).Tag).Focus();
            }
        }


Но возникла следующая неразрешимая ситуация. Если на форме присутствует какой-либо другой элемент управления и при переходе фокуса на этот элемент управления я должен «отвязать» мою кнопку от текущего RichTextBox, иначе после нажатия на кнопку текст вставится заново в RichTextBox и фокус снова вернется в RichTextBox.
Другими словами фокус у нас будет находится в одном элементе управления и действия произведутся в другом .
Первое, что мне пришло в голову это обрабатывать событие потери фокуса в RichTextBox, примерно вот так:

        private void RichTextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            PasteButton.Tag = null;            
        }

Но это привело к конфликту с первым случаем, когда я просто нажимаю на кнопку.
Попробовал обрабатывать событие GotFocus на самой кнопке, но это также не приводит к желаемому результату, так как оно происходит позже, чем событие LostFocus у RichTextBox.

Как мне ведется моя проблема, в том, что в момент события LostFocus у RichTextBox я не знаю, что произойдет в дальнейшем, будет ли нажата кнопка или фокус действительно переходи на другой элемент управления.

Кроме идеи с таймером ни оной больше идеи нет.

Может кто-нибудь решал подобную задачу?
Может я вообще не верно подошел к проблеме?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.