Привет!
Есть вот такой UserControl, представляющий собой один вопрос из теста:
Как видно на скрине, в его Grid 2 колонки и одна строка. В первой колонке содержится всегда TextBox с именем Question, во второй может содержаться CheckBox, ComboBox, TextBox, NumericUpDown (от eisiWare) — в общем объект, унаследованный от класса System.Windows.Controls.Control, его имя Answer. Конкретный класс объекта Answer выбирается в зависимости от типа ответа на вопрос. Сам UserControl создается исключительно в коде программы, соответственно доступ к его разметке достаточно затруднен.
В общем, добрые люди, подскажите, пожалуйста, как мне сделать, чтобы при клике мышкой на ячейку с Answer происходило событие клика и на Answer, даже если конкретно на Answer клика и не было? Это необходимо только для CheckBox. Я уже пробовал маршрутизируемые события, но у меня ничего толкового не получилось, т.к. опыта с WPF практически нет
Надеюсь на вашу помощь
Здравствуйте, Omitishi, Вы писали:
O>Привет! O>Есть вот такой UserControl, представляющий собой один вопрос из теста: O>Image: a217453168.jpg O>Как видно на скрине, в его Grid 2 колонки и одна строка. В первой колонке содержится всегда TextBox с именем Question, во второй может содержаться CheckBox, ComboBox, TextBox, NumericUpDown (от eisiWare) — в общем объект, унаследованный от класса System.Windows.Controls.Control, его имя Answer. Конкретный класс объекта Answer выбирается в зависимости от типа ответа на вопрос. Сам UserControl создается исключительно в коде программы, соответственно доступ к его разметке достаточно затруднен. O>В общем, добрые люди, подскажите, пожалуйста, как мне сделать, чтобы при клике мышкой на ячейку с Answer происходило событие клика и на Answer, даже если конкретно на Answer клика и не было? Это необходимо только для CheckBox. Я уже пробовал маршрутизируемые события, но у меня ничего толкового не получилось, т.к. опыта с WPF практически нет O>Надеюсь на вашу помощь
Одно из наиболее простых, на мой взгляд, решений — переопределить шаблон CheckBox'а, таким образом, чтобы он растягивался на всю ячейку.
Здравствуйте, vit_as, Вы писали:
_>Одно из наиболее простых, на мой взгляд, решений — переопределить шаблон CheckBox'а, таким образом, чтобы он растягивался на всю ячейку.
_>
Но, как я упоминал в первом сообщении, контрол создается в коде программы, то есть CheckBox добавляется на Grid программно, поэтому непонятно, как получить доступ к XAML контрола и осуществить показанные Вами изменения.
Быть может есть способ сделать это при создании CheckBox?
Re[3]: [WPF] Как перенаправить клик по ячейке Grid на CheckBox?
O>Но, как я упоминал в первом сообщении, контрол создается в коде программы, то есть CheckBox добавляется на Grid программно, поэтому непонятно, как получить доступ к XAML контрола и осуществить показанные Вами изменения.
Советую почитать про MVVM и использовать не Grid, а контрол производный от ItemsControl, например DataGrid.
O>Быть может есть способ сделать это при создании CheckBox?
Для того, чтобы стиль чекбокса "подцепился", нужно добавить его в ресурсы Вашего Grid'a.
Здравствуйте, vit_as, Вы писали:
_>Здравствуйте, Omitishi, Вы писали:
O>>Но, как я упоминал в первом сообщении, контрол создается в коде программы, то есть CheckBox добавляется на Grid программно, поэтому непонятно, как получить доступ к XAML контрола и осуществить показанные Вами изменения.
_>Советую почитать про MVVM и использовать не Grid, а контрол производный от ItemsControl, например DataGrid.
O>>Быть может есть способ сделать это при создании CheckBox?
_>Для того, чтобы стиль чекбокса "подцепился", нужно добавить его в ресурсы Вашего Grid'a.
_>
Спасибо огромное за Ваш совет, хотя чекбокс даже с новым стилем не растягивается на всю ячейку, но я просто сделал размер чекбокса больше, в принципе такое решение проблемы мне тоже подходит . Еще раз, спасибо за ответ
Re: [WPF] Как перенаправить клик по ячейке Grid на CheckBox?
Здравствуйте, Omitishi, Вы писали:
O>Привет! O>Есть вот такой UserControl, представляющий собой один вопрос из теста: O>Image: a217453168.jpg O>Как видно на скрине, в его Grid 2 колонки и одна строка. В первой колонке содержится всегда TextBox с именем Question, во второй может содержаться CheckBox, ComboBox, TextBox, NumericUpDown (от eisiWare) — в общем объект, унаследованный от класса System.Windows.Controls.Control, его имя Answer. Конкретный класс объекта Answer выбирается в зависимости от типа ответа на вопрос. Сам UserControl создается исключительно в коде программы, соответственно доступ к его разметке достаточно затруднен. O>В общем, добрые люди, подскажите, пожалуйста, как мне сделать, чтобы при клике мышкой на ячейку с Answer происходило событие клика и на Answer, даже если конкретно на Answer клика и не было? Это необходимо только для CheckBox. Я уже пробовал маршрутизируемые события, но у меня ничего толкового не получилось, т.к. опыта с WPF практически нет O>Надеюсь на вашу помощь
Если textbox не подразумевает ввода то зачем его использовать. Можно заменить его на label который будет вести на checkbox.
<TextBox Name="tb" Width="50"/>
<Label Target="{Binding ElementName=tb}">_File</Label>
еще один вариант это подписка на событие MouseRigthButtonDown и устонавливать значение textbox в callback'e