我想在DataContext
上发生MouseEnter
事件时在StackPanel
中设置CLR属性。但是,StackPanel
在DataTemplate
的{{1}}内定义,ItemsControl
在Generic.xaml
内的自定义控件的控制模板中定义。
示例逻辑:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type pie:PieChartControl}">
<Grid>
<ItemsControl
ItemsSource="{Binding slices, RelativeSource={RelativeSource TemplatedParent}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel>
<StackPanel.Triggers>
// Need help here...
<EventTrigger RoutedEvent="MouseEnter">
<Setter Property="MyProp" Value="myVal"/>
</EventTrigger>
</StackPanel.Triggers>
<Rectangle ... />
<TextBlock ... />
</StackPanel>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
编辑:寻找仅限XAML的解决方案。可以通过代码隐藏轻松完成!
答案 0 :(得分:0)
您可以将IsMouseOver属性用作样式触发器:
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="MyProp" Value="myVal" />
</Trigger>
</Style.Triggers/>
或者如果你想做一些更复杂的事情,你可以在
背后的代码中处理 <EventSetter Event="MouseEnter" Handler="YourCodeBehindMethodHere"/>