C# 为ellipse添加属性以获取MouseeEvent c

C# 为ellipse添加属性以获取MouseeEvent c,c#,wpf,C#,Wpf,我在long for循环中添加了省略号,添加了100多个,我想知道在相同的for cycle on click事件中添加了一个属性。 在for循环内: var ellipse = new Ellipse(); ellipse.myValue=12; // this needs to be editable and working .... ellipse.MouseDown += ellipseClick; canvas2.Children.Add(ellipse); 下面是听众:

我在long for循环中添加了省略号,添加了100多个,我想知道在相同的for cycle on click事件中添加了一个属性。 在for循环内:

 var ellipse = new Ellipse();
 ellipse.myValue=12; // this needs to be editable and working
 ....
 ellipse.MouseDown += ellipseClick;
 canvas2.Children.Add(ellipse);
下面是听众:

private void ellipseClick(object sender, MouseButtonEventArgs e)
    {
        if(myValue==12) 
        ....
    }
当然它有点复杂,我需要一个指针或者每个椭圆有3个int值。 我不想在每个椭圆上检查单击位置,以及它是否与发送者相同。 我无法扩展Ellipse类,因为它是密封的,并且我无法重写Ellipse类中的代码。

您可以使用Tag属性来存储其他信息

ellipse.Tag = 12;
我希望这就是你想要的,但根据你对我的问题的评论,你只想存储每个椭圆的信息

您可以创建包含所有所需信息的结构或类,只需将标记设置为该类。它允许您存储任何您想要的信息。

您可以使用Tag属性来存储其他信息

ellipse.Tag = 12;
我希望这就是你想要的,但根据你对我的问题的评论,你只想存储每个椭圆的信息


您可以创建包含所有所需信息的结构或类,只需将标记设置为该类。它允许您存储所需的任何内容。

您可以使用包含对象的标记属性。你可以把你想要的任何东西放在那里,你可以创建你的类,它可以保存任意数量的值。你可以这样做。


可以使用包含对象的标记属性。你可以把你想要的任何东西放在那里,你可以创建你的类,它可以保存任意数量的值。你可以这样做。


创建一个自定义控件,该控件包含一个椭圆,并以统一的方式处理鼠标悬停。在自定义控件中提供所有其他控件的依赖项属性,以便根据需要了解其他椭圆并获取发件人信息。

创建一个自定义控件,该控件包含椭圆并以统一方式处理鼠标悬停。在自定义控件中提供所有其他控件的依赖项属性,以便根据需要了解其他省略号并获取发件人信息。

您可以使用标记属性,但通用标记是winforms时代的遗留问题。读一读。我不喜欢标记的地方是它们没有被键入,这意味着要从中读取,而且它们没有有意义的名称。另一种选择是:

附着属性

写起来很难,幸运的是,byt VS有一个片段类型propa并按tab键

因此:

然后使用如下属性:

编码

附件属性在xaml中有自己的属性 请注意本地名称空间

<Window x:Class="SO_AttachmentProperty.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SO_AttachmentProperty"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Ellipse local:EllipseAttachments.Field1="789" local:EllipseAttachments.Field2="67"/>
    </Grid>
</Window>
您可以使用标记属性,但通用标记是winforms时代的遗留问题。读一读。我不喜欢标记的地方是它们没有被键入,这意味着要从中读取,而且它们没有有意义的名称。另一种选择是:

附着属性

写起来很难,幸运的是,byt VS有一个片段类型propa并按tab键

因此:

然后使用如下属性:

编码

附件属性在xaml中有自己的属性 请注意本地名称空间

<Window x:Class="SO_AttachmentProperty.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SO_AttachmentProperty"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Ellipse local:EllipseAttachments.Field1="789" local:EllipseAttachments.Field2="67"/>
    </Grid>
</Window>

我真的不明白你的问题到底是什么…ellipse.myValue不会编译,因为它不包含“myValue”。我会扩展Ellipse类,使其包含,但我不能,因为它是一个密封类。“我想为我的点击事件获取其他信息myValue”。@CSOMAK:您正在寻找。我真的不明白您的问题到底是什么……ellipse.myValue不会编译,因为它不包含“myValue”。我会扩展Ellipse类,使其包含,但我不能,因为它是一个密封类。我想为我的点击事件提供其他信息myValue。@CSOMAK:您正在寻找。标记是对象,所以您可以在那里放置任何您想要的东西,只需在使用它之前将其强制转换。标记是对象,所以您可以在那里放置任何您想要的东西,只需在使用它之前将其强制转换。我更新了我的答案。你可以储存任何你想要的东西。只需创建一个包含所有所需信息的类,并将其添加到标记中即可。太棒了!我不认为标签不是字符串而是任何对象。谢谢没问题,标记实际上是一个对象。你应该通读所有的答案,并接受其中一个是对你的问题最有用的答案,因为StackOverflow就是基于此的;这实际上是Windows窗体的一种不雅的保留。在WPF中,我们使用。它们更健壮,支持更广泛的问题,更好的是它们是强类型的。我更新了我的答案。你可以储存任何你想要的东西。只需创建一个包含所有所需信息的类,并将其添加到标记中即可。太棒了!我不认为标签不是字符串而是任何对象。谢谢没问题,标记实际上是一个对象。你应该通读所有答案,并接受其中一个作为mos
这对你的问题没什么用处,因为StackOverflow就是基于此的。它非常优雅:ellipse.Tag=newEllipseextension{i=10,dir=i};这实际上是Windows窗体的一种不雅的保留。在WPF中,我们使用。它们更加健壮,支持范围更广的问题,更好的是它们是强类型的。
<Window x:Class="SO_AttachmentProperty.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SO_AttachmentProperty"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Ellipse local:EllipseAttachments.Field1="789" local:EllipseAttachments.Field2="67"/>
    </Grid>
</Window>