[WPF] пара вопросов
От: Ummon Россия  
Дата: 29.07.11 06:57
Оценка:
Привет!

1) Есть текстбоксик с привязкой, если в него с клавиатуры вводить данные — все нормально ложится в привязанный объект. А вот если в code-behind по нажатию какой-нить кнопочки будет textBox.Text = "qwe123", то, видимо, у контрола не возникает какого-то события и в свойстве ничего не оказывается. Если после этого сделать textBox.Focus() — тогда срабатывает.
Что еще нужно вызвать? Или как делать правильней?

2) Чем отличается Label от TextBlock?..
Нет, я, конечно, погуглил и нашел хорошую статью, но как-то еще остались вопросы.
Если рядом положить лейбл и текстБлок — у них как минимум будут отличаться марджины.
Еще наткнулся на такое отличие: у Window случайно выставил Foreground="{x:Null}" — у лейбла без всяких дополнительных свойств текст отображается, у текстБлока — нет. Почему?
В чем еще отличия?.. И где/как информацию подобного рода искать?
Re: [WPF] пара вопросов
От: Vladek Россия Github
Дата: 29.07.11 13:08
Оценка: 1 (1)
Здравствуйте, Ummon, Вы писали:

U>2) Чем отличается Label от TextBlock?..

U>Нет, я, конечно, погуглил и нашел хорошую статью, но как-то еще остались вопросы.
U>Если рядом положить лейбл и текстБлок — у них как минимум будут отличаться марджины.
U>Еще наткнулся на такое отличие: у Window случайно выставил Foreground="{x:Null}" — у лейбла без всяких дополнительных свойств текст отображается, у текстБлока — нет. Почему?
U>В чем еще отличия?.. И где/как информацию подобного рода искать?

TextBlock это просто блок текста, любой текст в UI, его представление (цвет, шрифт, прочее) определяет контрол, внутрь которого он помещается. Label — полноценный контрол (со своим поведением, метка не просто текст), с представлением чаще всего в виде того же самого блока текста.
Re[2]: [WPF] пара вопросов
От: Ummon Россия  
Дата: 29.07.11 13:35
Оценка:
Здравствуйте, Vladek, Вы писали:

V>Здравствуйте, Ummon, Вы писали:


U>>2) Чем отличается Label от TextBlock?..

U>>Нет, я, конечно, погуглил и нашел хорошую статью, но как-то еще остались вопросы.
U>>Если рядом положить лейбл и текстБлок — у них как минимум будут отличаться марджины.
U>>Еще наткнулся на такое отличие: у Window случайно выставил Foreground="{x:Null}" — у лейбла без всяких дополнительных свойств текст отображается, у текстБлока — нет. Почему?
U>>В чем еще отличия?.. И где/как информацию подобного рода искать?

V>TextBlock это просто блок текста, любой текст в UI, его представление (цвет, шрифт, прочее) определяет контрол, внутрь которого он помещается. Label — полноценный контрол (со своим поведением, метка не просто текст), с представлением чаще всего в виде того же самого блока текста.


Я из статьи понял, что они наследуют от разных типов, и что, в конце-концов, по умолчанию лейбл содержит в себе текстБлок. Но где и как можно получить информацию о том, какие именно свойства переопределяются? (не только для лейбла, а вообще для любых стандартных контролов)
Я, например, наткнулся на эту ситуацию, когда поместил групБокс (он, очевидно, тоже по умолчанию содержит у себя в хидере текстБлок) прямо на форму — а хидер не отображается; помещаю его на закладку табКонтрола — отображается. Далеко не сразу понял, что дело именно в свойстве Foreground окна.

Спасибо!
Re[3]: [WPF] пара вопросов
От: Vladek Россия Github
Дата: 29.07.11 14:39
Оценка: 2 (1)
Здравствуйте, Ummon, Вы писали:

U>Но где и как можно получить информацию о том, какие именно свойства переопределяются? (не только для лейбла, а вообще для любых стандартных контролов)


В MSDN, на странице описания свойства указано: наследутся ли его значение или нет.

Раздел Dependency Property Information | столбец Metadata properties set to true | значение Inherits

Например, здесь.
Re: UP! по первому вопросу
От: Ummon Россия  
Дата: 01.08.11 04:46
Оценка:
U>1) Есть текстбоксик с привязкой, если в него с клавиатуры вводить данные — все нормально ложится в привязанный объект. А вот если в code-behind по нажатию какой-нить кнопочки будет textBox.Text = "qwe123", то, видимо, у контрола не возникает какого-то события и в свойстве ничего не оказывается. Если после этого сделать textBox.Focus() — тогда срабатывает.
U>Что еще нужно вызвать? Или как делать правильней?
Re[2]: UP! по первому вопросу
От: Fortnum  
Дата: 01.08.11 15:09
Оценка: 2 (1)
Здравствуйте, Ummon, Вы писали:

U>>1) Есть текстбоксик с привязкой, если в него с клавиатуры вводить данные — все нормально ложится в привязанный объект. А вот если в code-behind по нажатию какой-нить кнопочки будет textBox.Text = "qwe123", то, видимо, у контрола не возникает какого-то события и в свойстве ничего не оказывается. Если после этого сделать textBox.Focus() — тогда срабатывает.

U>>Что еще нужно вызвать? Или как делать правильней?

Вызвать BindingExpression.UpdateSource или использовать UpdateSourceTrigger=PropertyChanged:

_textBox.Text = "Bla-bla-bla";

var bindingExpression = BindingOperations.GetBindingExpression(_textBox, TextBox.TextProperty);

if (bindingExpression != null)
{
    bindingExpression.UpdateSource();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.