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

时间:2014-07-17 10:13:07

标签: c# wpf mvvm

我想在DataContext上发生MouseEnter事件时在StackPanel中设置CLR属性。但是,StackPanelDataTemplate的{​​{1}}内定义,ItemsControlGeneric.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的解决方案。可以通过代码隐藏轻松完成!

1 个答案:

答案 0 :(得分:0)

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

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

或者如果你想做一些更复杂的事情,你可以在

背后的代码中处理
    <EventSetter Event="MouseEnter" Handler="YourCodeBehindMethodHere"/>