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>
试试这个
<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类中订阅它,然后从上面的处理程序中触发该事件。