Доброго...
Есть примерно следующий 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 я не знаю, что произойдет в дальнейшем, будет ли нажата кнопка или фокус действительно переходи на другой элемент управления.
Кроме идеи с таймером ни оной больше идеи нет.
Может кто-нибудь решал подобную задачу?
Может я вообще не верно подошел к проблеме?
M>Я никакой задачи не увидел — просто набор "я нажимаю... оно вставляется... другой элемент...". Саму задачу можно сформулировать?
Доброго...
Возможно я не точно выразился…
Задача моя в том, чтобы при срабатывании события LoastFocus у RichTextBox я должен понимать нажал ли я нужную мне кнопку или просто перевел фокус на другой элемент управления.
Что то типа такого:
private void RichTextBox_LostFocus(object sender, RoutedEventArgs e)
{
if(!ClickOnButton)
{
PasteButton.Tag = null;
}
}
Вот задача и состоит в том, чтобы каким либо образом разделить два случая.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.