none
WPF 鼠标事件 RRS feed

答案

  • 你好 Ocean

    你想给EllipseGeometry注册一个其原本没有的鼠标事件,我们先假定要注册的是一个鼠标左键双击事件,下面我给出两种实现方法给你作为参考:

    第一种方法:使用控件模板,我们需要制造一个拥有鼠标双击事件的椭圆,而Button原本就拥有这样一个事件,所以只要让一个Button看起来像个椭圆就可以达到我们的目的了。那么我们只需要给Button的样式创建一个控件模板就可以了。以下代码供参考:

    <Window x:Class="CustomDoubleClick.Window1"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            xmlns:this="clr-namespace:CustomDoubleClick"

        Title="Window1" Height="300" Width="300">

        <Window.Resources>

            <Style TargetType="{x:Type Button}" x:Key="EllipseButton">

                <Setter Property="Template">

                    <Setter.Value>

                        <ControlTemplate>

                            <EllipseGeometry/>

                        </ControlTemplate>

                    </Setter.Value>

                </Setter>

            </Style>

        </Window.Resources>

        <Canvas>

            <Button Style="{StaticResource EllipseButton }" Width="200" Height="200"

                    Background="Red" MouseDoubleClick="Button_MouseDoubleClick">

            </Button>

        </Canvas>

    </Window>

     

    第二种方法:我们可以创建一个只包含一个Ellipse和拥有鼠标左键双击事件的user control,以下的代码供你参考:

    XAML

    <UserControl x:Class="CustomDoubleClick.GridWrapper"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Height="300" Width="300">

        <Grid>

     

        </Grid>

    </UserControl>

     

    Code behind

    public partial class GridWrapper : UserControl

        {

            public GridWrapper()

            {

                InitializeComponent();

                this.MouseDoubleClick +=

                      new MouseButtonEventHandler(GridWrapper_MouseDoubleClick);

            }

     

            void GridWrapper_MouseDoubleClick(object sender, MouseButtonEventArgs e)

            {

                throw new NotImplementedException();

            }

        }

    因为我们的user control完全只被一个Ellipse占满,所以当我们给user control添加鼠标双击事件时,也就是给Ellipse添加双击事件。

    以上的方法在其他控件中也同样适用,例如Grid

    希望你能告诉我问题解决的进展如何。

    如果你仍然有什么问题,请告诉我,我将继续和你一起解决。


    Annabella Luo [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年7月20日 9:48
    版主

全部回复

  • Add panel outside

    2011年7月20日 6:29
  • 你好 Ocean

    你想给EllipseGeometry注册一个其原本没有的鼠标事件,我们先假定要注册的是一个鼠标左键双击事件,下面我给出两种实现方法给你作为参考:

    第一种方法:使用控件模板,我们需要制造一个拥有鼠标双击事件的椭圆,而Button原本就拥有这样一个事件,所以只要让一个Button看起来像个椭圆就可以达到我们的目的了。那么我们只需要给Button的样式创建一个控件模板就可以了。以下代码供参考:

    <Window x:Class="CustomDoubleClick.Window1"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            xmlns:this="clr-namespace:CustomDoubleClick"

        Title="Window1" Height="300" Width="300">

        <Window.Resources>

            <Style TargetType="{x:Type Button}" x:Key="EllipseButton">

                <Setter Property="Template">

                    <Setter.Value>

                        <ControlTemplate>

                            <EllipseGeometry/>

                        </ControlTemplate>

                    </Setter.Value>

                </Setter>

            </Style>

        </Window.Resources>

        <Canvas>

            <Button Style="{StaticResource EllipseButton }" Width="200" Height="200"

                    Background="Red" MouseDoubleClick="Button_MouseDoubleClick">

            </Button>

        </Canvas>

    </Window>

     

    第二种方法:我们可以创建一个只包含一个Ellipse和拥有鼠标左键双击事件的user control,以下的代码供你参考:

    XAML

    <UserControl x:Class="CustomDoubleClick.GridWrapper"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Height="300" Width="300">

        <Grid>

     

        </Grid>

    </UserControl>

     

    Code behind

    public partial class GridWrapper : UserControl

        {

            public GridWrapper()

            {

                InitializeComponent();

                this.MouseDoubleClick +=

                      new MouseButtonEventHandler(GridWrapper_MouseDoubleClick);

            }

     

            void GridWrapper_MouseDoubleClick(object sender, MouseButtonEventArgs e)

            {

                throw new NotImplementedException();

            }

        }

    因为我们的user control完全只被一个Ellipse占满,所以当我们给user control添加鼠标双击事件时,也就是给Ellipse添加双击事件。

    以上的方法在其他控件中也同样适用,例如Grid

    希望你能告诉我问题解决的进展如何。

    如果你仍然有什么问题,请告诉我,我将继续和你一起解决。


    Annabella Luo [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年7月20日 9:48
    版主
  • 谢谢楼上的回复

     

    2011年7月22日 1:42