Привет!
1) Есть текстбоксик с привязкой, если в него с клавиатуры вводить данные — все нормально ложится в привязанный объект. А вот если в code-behind по нажатию какой-нить кнопочки будет textBox.Text = "qwe123", то, видимо, у контрола не возникает какого-то события и в свойстве ничего не оказывается. Если после этого сделать textBox.Focus() — тогда срабатывает.
Что еще нужно вызвать? Или как делать правильней?
2) Чем отличается Label от TextBlock?..
Нет, я, конечно, погуглил и нашел хорошую
статью, но как-то еще остались вопросы.
Если рядом положить лейбл и текстБлок — у них как минимум будут отличаться марджины.
Еще наткнулся на такое отличие: у Window случайно выставил Foreground="{x:Null}" — у лейбла без всяких дополнительных свойств текст отображается, у текстБлока — нет. Почему?
В чем еще отличия?.. И где/как информацию подобного рода искать?
Здравствуйте, Ummon, Вы писали:
U>2) Чем отличается Label от TextBlock?..
U>Нет, я, конечно, погуглил и нашел хорошую статью, но как-то еще остались вопросы.
U>Если рядом положить лейбл и текстБлок — у них как минимум будут отличаться марджины.
U>Еще наткнулся на такое отличие: у Window случайно выставил Foreground="{x:Null}" — у лейбла без всяких дополнительных свойств текст отображается, у текстБлока — нет. Почему?
U>В чем еще отличия?.. И где/как информацию подобного рода искать?
TextBlock это просто блок текста, любой текст в UI, его представление (цвет, шрифт, прочее) определяет контрол, внутрь которого он помещается. Label — полноценный контрол (со своим поведением, метка не просто текст), с представлением чаще всего в виде того же самого блока текста.
Здравствуйте, Vladek, Вы писали:
V>Здравствуйте, Ummon, Вы писали:
U>>2) Чем отличается Label от TextBlock?..
U>>Нет, я, конечно, погуглил и нашел хорошую статью, но как-то еще остались вопросы.
U>>Если рядом положить лейбл и текстБлок — у них как минимум будут отличаться марджины.
U>>Еще наткнулся на такое отличие: у Window случайно выставил Foreground="{x:Null}" — у лейбла без всяких дополнительных свойств текст отображается, у текстБлока — нет. Почему?
U>>В чем еще отличия?.. И где/как информацию подобного рода искать?
V>TextBlock это просто блок текста, любой текст в UI, его представление (цвет, шрифт, прочее) определяет контрол, внутрь которого он помещается. Label — полноценный контрол (со своим поведением, метка не просто текст), с представлением чаще всего в виде того же самого блока текста.
Я из статьи понял, что они наследуют от разных типов, и что, в конце-концов, по умолчанию лейбл содержит в себе текстБлок. Но где и как можно получить информацию о том, какие именно свойства переопределяются? (не только для лейбла, а вообще для любых стандартных контролов)
Я, например, наткнулся на эту ситуацию, когда поместил групБокс (он, очевидно, тоже по умолчанию содержит у себя в хидере текстБлок) прямо на форму — а хидер не отображается; помещаю его на закладку табКонтрола — отображается. Далеко не сразу понял, что дело именно в свойстве Foreground окна.
Спасибо!
Здравствуйте, Ummon, Вы писали:
U>Но где и как можно получить информацию о том, какие именно свойства переопределяются? (не только для лейбла, а вообще для любых стандартных контролов)
В
MSDN, на странице описания свойства указано: наследутся ли его значение или нет.
Раздел Dependency Property Information | столбец Metadata properties set to true | значение Inherits
Например,
здесь.
Здравствуйте, 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();
}