Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在数据模板内设置MouseEnter事件的属性_C#_Wpf_Mvvm - Fatal编程技术网

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属性。因此出现错误,未找到属性名称。无论如何,我现在已经使用了事件处理背后的脏代码来完成它。不喜欢它,但似乎找不到任何其他方式!