2015-01-07 4 views
0

지금 나는 사용자가 클릭 할 때마다 그 위에 타원의 무리가있는 캔버스를 가지고 있습니다. 나는 그가 그것을 클릭 할 때 그것을 만들기 위해 노력하고있다, 검은 경계는 그가 다른 것을 클릭 할 때까지 그 주위에 표시된다. 지금 당장 나는 그것을 가지고 있기 때문에 하나를 클릭하면 국경이 나타나서 거기에 머물러있다.다른 타원을 클릭 할 때까지 클릭 한 타원을 강조 표시하십시오.

다음은 타원을 클릭하는 기능입니다.

private void ellipse_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     e.Handled = true; 

     selectedNodeEllipse = (Ellipse)sender; 
     SelectedNode = (Node)selectedNodeEllipse.Tag; //just displays some info about the node 

     selectedNodeEllipse.Stroke = Brushes.Black; 

    } 

모든 타원은 (노드 유형의) 목록에 있습니다.

아이디어가 있으십니까?

+1

전에 스트로크가 무엇입니까? 새로운'selectedNodeEllipse' 값을 할당하기 전에'Stroke' 속성을 원래의 값으로 되돌릴 수없는 이유는 무엇입니까? –

+0

스트로크는 이전에 설정되지 않았으므로 기본값이었습니다. 그러나 당신이 "selectedNodeEllipse.Stroke = default();"라고 말한 것을 시도했습니다. "예상 된 유형"오류가 계속 표시됩니다. – pfinferno

+1

물론입니다. 유형을 제공하지 않으면'default' 키워드를 사용할 수 없습니다. 'Stroke'를 명시 적으로 설정하지 않았다면 기본값은'null'이어야합니다. 그럼 그냥 사용 :'selectedNodeEllipse.Stroke = null; ' –

답변

1

변수에 이전 타원 및 브러시를 저장하고 새 획 속성을 할당 할 때 데이터를 검색합니다.

코드

private Ellipse selectedNodeEllipse; 
private Ellipse previousEllipse = null; 
private Brush previousBrush; 

private void ellipse_MouseDown(object sender, MouseButtonEventArgs e) { 

    e.Handled = true; 
    if (previousEllipse != null) 
    { 
    previousEllipse.Stroke = previousBrush; 
    } 
    selectedNodeEllipse = (Ellipse)sender; 
    previousEllipse = selectedNodeEllipse; 
    previousBrush = previousEllipse.Stroke; 
    SelectedNode = (Node)selectedNodeEllipse.Tag; //just displays some info about the node 

    selectedNodeEllipse.Stroke = Brushes.Black; 

} 
+0

고마워요! 당신이 한 일과 비슷한 것을했고 그것은 완벽하게 작동했습니다. – pfinferno

+0

'previousEllipse'의 요점은 무엇입니까? 이것이 언제 selectedNodeEllipse와 같은 값이 아닌가? –

+0

@PeterDuniho selectedNodeEllipse는 마우스로 사용자가 선택한 타원에 대한 참조입니다. previousEllipse를 사용하여 마지막으로 사용자가 타원을 선택한 시간에 선택한 타원을 추적합니다. 그렇지 않으면 오래된 브러시를 적용 할 타원을 어떻게 알 수 있습니까? –

관련 문제