WPF如何在UserControl contentTemplates上捕获鼠标事件

本文关键字:鼠标 事件 contentTemplates UserControl WPF | 更新日期: 2023-09-27 18:16:23

我有这个小UserControl,它只是一个按钮。我想用它做一些很酷的事情,比如捕捉一个手势和其他一些人们想从自定义控件中得到的东西。

我的问题是我不能为MouseEnter写事件句柄,因为我不能像普通的UserControl一样处理ContentTemplate的成员。

通常I:

<Grid>
    <Label Name="hover" Content="hover me"/>
</Grid>

我可以在c#中写

this.hover.MouseEnter += handler;

我的目标是将这个用例应用到使用ContentTempalte的另一个UserControl

<UserControl x:Class="project.my_button" <!-- omitted for brevity --> >
<UserControl.ContentTemplate>
    <DataTemplate>
        <Border BorderBrush="#FFFFFFFF" BorderThickness="1" >
            <Grid Name="hover">
                <ContentPresenter Content="{TemplateBinding Content}"/>
            </Grid>
        </Border>
    </DataTemplate>
</UserControl.ContentTemplate>

WPF如何在UserControl contentTemplates上捕获鼠标事件

试试这个

<UserControl x:Class="Stackoverflow.ButtonUC"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Button>
        <Button.Template>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid Height="100" Width="200" Background="Red" MouseEnter="Grid_MouseEnter_1" Margin="20">
                    <ContentPresenter Content="{TemplateBinding Property=Content}"/>
                </Grid>
            </ControlTemplate>
        </Button.Template>
    </Button>
</Grid>

cs

   public partial class ButtonUC : UserControl
{
    public ButtonUC()
    {
        InitializeComponent();
    }
    private void Grid_MouseEnter_1(object sender, MouseEventArgs e)
    {
    }
}

如果你想在Window中订阅这个事件,那么你可以在这个usercontrol中创建一个事件,并在Window类中订阅它,然后从上面的处理程序中触发该事件。