Re: [WPF] Как перенаправить клик по ячейке Grid на CheckBox?
От: vit_as Россия  
Дата: 02.12.14 05:33
Оценка:
Здравствуйте, 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'а, таким образом, чтобы он растягивался на всю ячейку.

         <Style TargetType="{x:Type CheckBox}">
                    <Setter Property="BorderThickness"
                            Value="1" />
                    <Setter Property="BorderBrush"
                            Value="Silver" />
                    <Setter Property="Background"
                            Value="Transparent" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type CheckBox}">
                                <Border SnapsToDevicePixels="True"
                                        Background="Transparent">
                                    <Border  SnapsToDevicePixels="True"
                                             Width="14"
                                             Height="14"
                                             BorderThickness="{TemplateBinding BorderThickness}"
                                             BorderBrush="{TemplateBinding BorderBrush}">
                                        <Path Fill="#FFF96E2E"
                                              Name="checkGlyph"
                                              Visibility="Hidden"
                                              Stretch="Fill"
                                              Data="M102.03442,598.79645 L105.22962,597.78918 L106.78825,600.42358 C106.78825,600.42358 108.51028,595.74304 110.21724,593.60419 C112.00967,591.35822 114.89314,591.42316 114.89314,591.42316 C114.89314,591.42316 112.67844,593.42645 111.93174,594.44464 C110.7449,596.06293 107.15683,604.13837 107.15683,604.13837 z" />
                                    </Border>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver"
                                             Value="True">
                                        <Setter Property="BorderBrush"
                                                Value="Black" />
                                        <Setter Property="Fill"
                                                TargetName="checkGlyph"
                                                Value="#FFFF5E2E" />
                                    </Trigger>
                                    <Trigger Property="IsChecked"
                                             Value="True">
                                        <Setter Property="Visibility"
                                                TargetName="checkGlyph"
                                                Value="Visible" />
                                    </Trigger>
                                    <Trigger Property="IsEnabled"
                                             Value="False">
                                        <Setter Property="BorderBrush"
                                                Value="Gray" />
                                        <Setter Property="Fill"
                                                TargetName="checkGlyph"
                                                Value="#FFD6D6D6" />
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.