2012-11-16 2 views
1

에 타원을 추가 할 속성을 추가하십시오.주기가 길어서 (100 개가 넘음) 줄임표를 추가하고 있고 클릭시 이벤트에 대해 동일한 속성을 추가하고 싶습니다. 사이클 내부 : 나는 모든 타원에 대한 포인터 또는 3 개 INT 값을 필요한 것, 그것은 조금 더 복잡 물론mouseevent C#

private void ellipseClick(object sender, MouseButtonEventArgs e) 
    { 
     if(myValue==12) 
     .... 
    } 

: 여기

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

청취자입니다. 모든 타원형으로 가고 클릭 위치를 확인하고 발신자와 동일한 지 확인하고 싶습니다. Ellipse 클래스가 봉인되어 있고 Ellipse 클래스의 코드를 다시 쓸 수 없기 때문에 Ellipse 클래스를 확장 할 수 없습니다.

+0

정말 정확히 문제가 무엇인지 이해가 안 ... – phil13131

+0

ellipse.myValue는 컴파일되지 않습니다.Ellipse 클래스를 확장하여 포함 할 것이지만 봉인 된 클래스이므로 할 수 없습니다. 클릭 이벤트에 대한 추가 정보 (myValue)가 필요합니다. – csomakk

+0

@csomakk : [첨부 된 속성] (http://msdn.microsoft.com/en-us/library/ms749011.aspx)을 찾고 있습니다. – user7116

답변

2

추가 정보를 저장하려면 Tag 속성을 사용할 수 있습니다.

ellipse.Tag = 12; 

은 그게 당신이 요구하는 것을 희망하지만, 내 질문에 대한 귀하의 의견에 따라, 당신은 단지 각 타원 정보를 저장합니다.

원하는 모든 정보가 들어있는 구조체 또는 클래스를 만들고 해당 클래스에 Tag을 설정하면됩니다. 그것은 당신이 원하는 무엇이든을 저장할 수 있습니다.

+0

포인터를 삽입하고 싶다면 어떻게해야합니까? – csomakk

+1

답을 업데이트했습니다. 원하는 것을 저장할 수 있습니다. 필요한 모든 정보가 포함 된 클래스를 만들고이를 태그에 추가하십시오. – phil13131

+0

굉장해! 나는 태그가 문자열이 아니라 어떤 객체 이건간에 thougth하지 않았다. 감사! – csomakk

2

개체를 보유하고있는 Tag 속성을 사용할 수 있습니다. 원하는 것을 넣을 수 있습니다. 원하는 값을 유지할 수있는 클래스를 만들 수 있습니다. 이런 식으로 할 수 있습니다.

var ellipse = new Ellipse(); 
ellipse.Tag=12; 



private void ellipseClick(object sender, MouseButtonEventArgs e) 
{ 
    Ellipse ellipse = (Ellipse)sender; 
    int value = (int)ellipse.Tag   
    if(value==12) 
    .... 
} 
+0

포인터를 incude하려면 어떻게해야합니까? – csomakk

+0

태그는 객체이므로 원하는 것을 넣을 수 있습니다. 사용하기 전에 캐스트 할 수 있습니다. –

0

는 타원을 포함하고 통합 된 방식으로 마우스를 통해 처리하는 사용자 지정 컨트롤을 만듭니다. 다른 줄임표에 대해 알아보고 필요에 따라 보낸 사람 정보를 얻으려면 사용자 지정 컨트롤 내에서 다른 컨트롤의 종속성 속성을 제공하십시오.

3

Tag 속성을 사용할 수 있지만 범용 태그는 winforms 일부터 숙취입니다. 그것에 대해 읽으십시오 here. 내가 태그를 좋아하지 않는 이유는 태그가 입력되지 않았기 때문입니다.이 태그는 읽기 전용이므로 의미있는 이름이 없습니다. 대안은 다음과 같습니다

첨부 파일 속성 그것은 운이 좋게 VS는 조각 유형 propa 눌러 탭이 비와이 티, 쓰기 어렵다

.

그래서 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Shapes; 

namespace SO_AttachmentProperty 
{ 
    public sealed class EllipseAttachments 
    { 
     #region Field1 
     public static int GetField1(DependencyObject obj) 
     { 
      return (int)obj.GetValue(Field1Property); 
     } 

     public static void SetField1(DependencyObject obj, int value) 
     { 
      obj.SetValue(Field1Property, value); 
     } 

     // Using a DependencyProperty as the backing store for Field1. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty Field1Property = 
      DependencyProperty.RegisterAttached("Field1", typeof(int), typeof(EllipseAttachments), new UIPropertyMetadata(0)); 
     #endregion 

     #region Field2 
     public static int GetField2(DependencyObject obj) 
     { 
      return (int)obj.GetValue(Field2Property); 
     } 

     public static void SetField2(DependencyObject obj, int value) 
     { 
      obj.SetValue(Field2Property, value); 
     } 

     // Using a DependencyProperty as the backing store for Field2. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty Field2Property = 
      DependencyProperty.RegisterAttached("Field2", typeof(int), typeof(EllipseAttachments), new UIPropertyMetadata(0)); 
     #endregion 
    } 
} 

는 다음과 같이 속성을 사용

코드에서

var ellipse = new Ellipse(); 

//write 
EllipseAttachments.SetField1(ellipse, 123); 
EllipseAttachments.SetField2(ellipse, 456); 

//read 
var f1 = EllipseAttachments.GetField1(ellipse); 
var f2 = EllipseAttachments.GetField2(ellipse); 

첨부 파일 속성 참고 로컬 네임 스페이스 XAML에서 거기에 자신에 와서 . 이 'myValue'를 포함하지 않기 때문에

<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> 
관련 문제