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

时间:2014-08-04 16:26:08

标签: c# wpf user-controls datatemplate

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

我的问题是我无法为MouseEnter编写事件句柄,因为我无法像常规UserControl那样处理ContentTemplate的成员。

通常我:

<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>

1 个答案:

答案 0 :(得分:0)

试试这个

<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中订阅此事件,您将在该窗口中应用此控件,那么您可以在此用户控件中创建一个事件,并在Window类中订阅它并从上面的处理程序中触发该事件。

相关问题