如何在数据模板内的 MouseEnter 事件上设置属性

本文关键字:事件 MouseEnter 设置 属性 数据 | 更新日期: 2023-09-27 18:13:22

我想在StackPanel上发生MouseEnter事件时在DataContext中设置CLR属性。但是,StackPanel是在ItemsControlDataTemplate内定义的,该在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 的解决方案。可以使用代码隐藏轻松完成!

如何在数据模板内的 MouseEnter 事件上设置属性

您可以使用 IsMouseOver 属性作为样式触发器:

    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="MyProp" Value="myVal" />
        </Trigger>
    </Style.Triggers/>

或者,如果你想做一些更复杂的事情,你可以在代码后面处理它

    <EventSetter Event="MouseEnter" Handler="YourCodeBehindMethodHere"/>