Здравствуйте, 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>