powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding
8 сообщений из 8, страница 1 из 1
Binding
    #38611108
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшая проблемка. Имею контейнер, в котором находится кнопка и текстовый бокс.
Как на уровне привязки передать объект текст-бокса в кнопку.
Например, сам контейнер я могу привязать к кнопке, как показано ниже в XAML-е.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
...
<StackPanel>
  <Button Content="Кнопка"
          Tag="{Binding RelativeSource={RelativeSource AncestorType=StackPanel}}"
          />
  <TextBox Text="aaaa" />
</StackPanel>
...


Панель сразу находится.
Но, для того чтобы добраться до бокса нужно от контейнера пойти "вниз".
Как найти одновременно контейнер, и тут-же искать в списке его дочек - я так не умею!
Вариант с ElementName не прокатывает, так как элменты не имеют имени.

Подскажите плиз!
...
Рейтинг: 0 / 0
Binding
    #38611143
DoctorZelen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЧитательX,
если я правильно понял, текст из текстбокса должен отображаться на кнопке ?
...
Рейтинг: 0 / 0
Binding
    #38611243
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том числе и это. Вообще мне нужно "под кнопкой" провести некоторую обработку и, в том числе,
"поуправлять" текстбоксом. Например, покрасить его, поуправлять его IsReadOnly и т.д.
Этот конейнер с контролами является частью шаблона. Поэтому, когда реально создаются экземпляры шаблона, то контейнеров с этими контролами становится много (каждый экземпляр шаблона дает StackPanel и кнопку с боксом). Насколько я понимаю, искать в форме их по именам бесполезно.
Как вязаться с контролами не через RelativeSource Ancestor.., который ищет от "дочки" "вверх" по контейнерам, а например "по горизонтали" в одном контейнере или от узла к его дочерним контролам?
Я слышал высказывания, что в WPF можно вязать что угодно с чем угодно. Вот вроде совсем простая ситуация, но я в тупике.
...
Рейтинг: 0 / 0
Binding
    #38611531
DoctorZelen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЧитательX,

http://www.cyberforum.ru/wpf-silverlight/thread744160.html
может это поможет
...
Рейтинг: 0 / 0
Binding
    #38611717
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Binding ElementName смотри.
...
Рейтинг: 0 / 0
Binding
    #38611955
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user7320Binding ElementName смотри.
Да действительно ElementName работает. Я по ошибке думал, что если элементы находятся в шаблоне, то искать их по именам бесполезно (при создании экземпляров данных появляется много TextBox-ов с одним именем). Но оно как-то работает!
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<DataGridTemplateColumn>
...
  <StackPanel>

    <Button Name="Button1"
            Tag="{Binding ElementName=Box1}"
            Click="Button1_Click" />

    <TextBox Name="Box1" />			

  </StackPanel>
...
</DataGridTemplateColumn>


DoctorZelen http://www.cyberforum.ru/wpf-silverlight/thread744160.html
может это поможет
Это решение - доступ к элементу в коде. Но, такое решение мне знакомо. Например так:
Код: c#
1.
2.
3.
4.
5.
6.
private void Button1_Click(object sender, RoutedEventArgs e)
{
  Button btn = sender as Button;
  StackPanel pnl = btn.Parent as StackPanel;
  box = pnl.Children[1] as TextBox;
}


Но, я хотел знать как это сделать в XAML. А кроме того, в данном случае нужно указывать индекс нужного элемента в контейнере, а это уже не очень хорошо. Что-то добавил в контейнер - не забудь подвинуть индекс.
...
Рейтинг: 0 / 0
Binding
    #38611956
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за участие.
...
Рейтинг: 0 / 0
Binding
    #38612026
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧитательXuser7320Binding ElementName смотри.
Да действительно ElementName работает. Я по ошибке думал, что если элементы находятся в шаблоне, то искать их по именам бесполезно (при создании экземпляров данных появляется много TextBox-ов с одним именем). Но оно как-то работает!
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<DataGridTemplateColumn>
...
  <StackPanel>

    <Button Name="Button1"
            Tag="{Binding ElementName=Box1}"
            Click="Button1_Click" />

    <TextBox Name="Box1" />			

  </StackPanel>
...
</DataGridTemplateColumn>


Name в XAML это что-то типа имени переменной в C#. Элементы DataGridColumn создаются в цикле, а в пределах одной итерации цикла переменная может "повторяться" сколько угодно раз:

Код: c#
1.
2.
3.
4.
for(int i = 0; i < 10; i++)
{
    int a = i; // нет проблем с десятью переменными с одним и тем же именем "a"
}


Это примерное объяснение.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]