C# 如何在数据模板内设置MouseEnter事件的属性
当C# 如何在数据模板内设置MouseEnter事件的属性,c#,wpf,mvvm,C#,Wpf,Mvvm,当StackPanel上发生MouseEnter事件时,我想在DataContext中设置CLR属性。但是,StackPanel是在ItemsControl的DataTemplate中定义的,该控件是在Generic.xaml中自定义控件的控件模板中定义的 示例逻辑: <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type pie:Pie
StackPanel
上发生MouseEnter
事件时,我想在DataContext
中设置CLR属性。但是,StackPanel
是在ItemsControl
的DataTemplate
中定义的,该控件是在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的解决方案。可以很容易地完成代码隐藏 可以将IsMouseOver属性用作样式触发器:
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="MyProp" Value="myVal" />
</Trigger>
</Style.Triggers/>
或者,如果您想做一些更复杂的事情,您可以在代码隐藏中处理它
<EventSetter Event="MouseEnter" Handler="YourCodeBehindMethodHere"/>
不要在itemscontrol.itemtemplate中设置事件触发器,而是尝试在DataTemplate的控件模板中设置它。不要认为它有效。它抱怨没有为StackPanel定义属性名MyProp。您必须使用要更改的属性名。我从你的例子中取了“我的道具”——它不存在,这就是我的意思;)执行触发器时,只能使用WPF依赖项属性而不能使用CLR属性。因此出现错误,未找到属性名称。无论如何,我现在已经使用了事件处理背后的脏代码来完成它。不喜欢它,但似乎找不到任何其他方式!