2011-12-25 3 views
0

Я не знаю, называется ли это аргументом (т. Е. textbox1.text = "Hello";).Как определить, отправлено событие аргументом

У меня есть элемент управления, и в нем есть текстовое поле. Он имеет раскрывающийся список, который открывается при изменении текста. Но когда я обновляю текст в текстовом поле, окно падает.

Мне нужен способ сделать это, чтобы он только опускался, если кто-то вручную это делает.

TBAddressBar.ABText.Text = getCurrentBrowser().Source.ToString(); 

и

public void ABText_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if (sender == 1*) 
     { 
      ABDropDown.Visibility = Visibility.Visible; 
     } 
     else 
     { 
      ABDropDown.Visibility = Visibility.Collapsed; 
     } 
    } 
+0

Как открыть ниспадающее меню, когда текст изменяется в textbos? Вы делаете это вручную с помощью события или имеете привязку к триггеру? Можете ли вы опубликовать xaml, если задействован триггер? –

ответ

1

Если кто-то делает это вручную, по-видимому, они используют нажатия клавиш, чтобы сделать это. В этом случае используйте KeyDown или KeyUp события, чтобы отобразить выпадающий список.

+0

Я попробую это ... – thakyZ

+0

Спасибо, это сработало !! : D – thakyZ

0

Простой, просто удалите код из события TextChanged.

В любом случае у вас есть основная идея. Теперь создайте свою выпадающую логику в событии KeyPress, так как она принимает только символы, а не модификаторы. Таким образом, он ведет себя ближе к вашему требованию. Не то, чтобы вы не справлялись с тем же использованием KeyDown и KeyUp, но можете получить больше кода.

+0

Нет, я хочу сохранить его, но обнаруживаю, что такое отправитель. – thakyZ

+0

@ Тут вы получили ответ в любом случае. Я не мог полностью понять ваше описание. Правильный способ - обработать ваш код в правильном событии, то есть событие нажатия клавиши, на мой взгляд. – nawfal

1

То, что я делал в прошлом, это использование логической переменной, которую я установил, когда я обновляю свои текстовые поля программно, чтобы обойти TextChangedEvent.

т.е.

bool loading; 

.... 

loading =true; 

TBAddressBar.ABText.Text = getCurrentBrowser().Source.ToString(); 

loading = false; 

public void ABText_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    if(loading) return; 
    .... 
} 
+0

Это плохой способ, чтобы рассмотреть всюду, он программно меняет текст, ему нужно написать две дополнительные строки кода. Идеальный путь - это событие с ручным нажатием клавиши. – nawfal

Смежные вопросы