[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 я не знаю, что произойдет в дальнейшем, будет ли нажата кнопка или фокус действительно переходи на другой элемент управления.

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

Может кто-нибудь решал подобную задачу?
Может я вообще не верно подошел к проблеме?
Re: [Silverlight] RichTextBox с кнопкой и фокус.
От: matumba  
Дата: 06.01.13 20:11
Оценка:
Здравствуйте, detox, Вы писали:

D>Может кто-нибудь решал подобную задачу?


Я никакой задачи не увидел — просто набор "я нажимаю... оно вставляется... другой элемент...". Саму задачу можно сформулировать?
Re[2]: [Silverlight] RichTextBox с кнопкой и фокус.
От: detox Россия  
Дата: 07.01.13 04:26
Оценка:
M>Я никакой задачи не увидел — просто набор "я нажимаю... оно вставляется... другой элемент...". Саму задачу можно сформулировать?

Доброго...

Возможно я не точно выразился…
Задача моя в том, чтобы при срабатывании события LoastFocus у RichTextBox я должен понимать нажал ли я нужную мне кнопку или просто перевел фокус на другой элемент управления.
Что то типа такого:
        private void RichTextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            if(!ClickOnButton)
            {
               PasteButton.Tag = null;            
            }
        }

Вот задача и состоит в том, чтобы каким либо образом разделить два случая.
Re[3]: [Silverlight] RichTextBox с кнопкой и фокус.
От: TK Лес кывт.рф
Дата: 08.01.13 09:05
Оценка:
Здравствуйте, detox, Вы писали:

D>Вот задача и состоит в том, чтобы каким либо образом разделить два случая.


Можно пойти с другой стороны — сделать кнопку которая не забирает фокус. Например, использовать тулбар.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: [Silverlight] RichTextBox с кнопкой и фокус.
От: detox Россия  
Дата: 14.01.13 07:12
Оценка:
Здравствуйте, TK, Вы писали:

TK>Можно пойти с другой стороны — сделать кнопку которая не забирает фокус. Например, использовать тулбар.


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