2012-03-24 3 views
1

왜 wpf로 이것을 할 수 없습니까?버튼에 콘텐츠 추가 wpf로 클릭하십시오

 foreach (var routedEventHandler in new RoutedEventHandler[] { button1Click, button2Click, button3_Click })` 

을 지금은 스타일을 적용이 분야에서 :

button1Click.Content = "Hover over me"; 

또는

ToolTip t = new ToolTip(); 
    t.Content = "Something helpful"; 
    button1Click.Tooltip = t; 

나는 내가 다음과 같이 버튼을 추가하는 foreach 루프가 초기화에 채우기 버튼 내 과부를 채울 버튼 하나로 모두 이동하십시오.

public void populateButtons() 
     { 
      double xPos; 
      double yPos; 


      Random ranNum = new Random(); 
      foreach (var routedEventHandler in new RoutedEventHandler[] { button1Click, button2Click, button3_Click }) 
      { 

       Button foo = new Button(); 



       Style buttonStyle = Window.Resources["CurvedButton"] as Style; 
       int sizeValue = 100; 

       foo.Width = sizeValue; 
       foo.Height = sizeValue; 

       xPos = ranNum.Next(200); 
       yPos = ranNum.Next(250); 


       foo.HorizontalAlignment = HorizontalAlignment.Left; 
       foo.VerticalAlignment = VerticalAlignment.Top; 
       foo.Margin = new Thickness(xPos, yPos, 0, 0); 
       foo.Style = buttonStyle; 

       foo.Click += routedEventHandler; 

       LayoutRoot.Children.Add(foo); 
      } 
     } 
    } 
} 

하지만이하려고하면

private void button3_Click(object sender, RoutedEventArgs e) 
    { 
     ((Button)sender).ToolTip = t; 
    } 

버튼을 누를 때 만 활성화? (감사 @의 H.B)

그러나 내가 채우기 버튼의 툴팁 코드를 붙여 넣을 때 : 그것은 작동

 Random ranNum = new Random(); 
     foreach (var routedEventHandler in new RoutedEventHandler[] { button1Click, button2Click, button3_Click }) 
     { 

      Button foo = new Button(); 
      ToolTip t = new ToolTip(); 
      t.Content = "Something helpful"; 
      foo.ToolTip = t; 

를? 그러나 문제는 이런 식으로 모든 버튼을 동일한 툴팁 및/또는 버튼 컨텐츠로 설정한다는 것입니다. 나는 원하지 않지만, 나는 그 길을 찾을 수 없다.

요약하면 "populateButtons()"내에서 동일한 툴팁 메시지 또는 버튼 내용으로 모든 버튼을 설정하거나 버튼을 누르면 툴팁과 버튼 내용 만 설정할 수 있습니다.

있는 방법은 명명 된 버튼에 내용을 추가 할 수 수 없습니까? 내 최초의 시도처럼

:

button1Click.Content = "Home Button"; 

또는

button1Click.ToolTip = "Hover over me"; 

왜 지구에 당신이 초기화 특정 버튼에 대한 내용과 도구 설명을 설정 캔트?

+0

이유에서가 세계는 하나의 핸들러 컬렉션을 반복 할 것입니다 ... –

+0

http://stackoverflow.com/questions/9843718/randomly-assigned-buttons 여기에서 이유를 찾을 수 있습니다. @HB –

답변

1

당신이로드 이벤트에 대한 핸들러를 추가 할 수 있습니다

void button2Click(object sender, RoutedEventArgs e) 
    { 
     if (e.RoutedEvent == FrameworkElement.LoadedEvent) 
     { 
      ToolTip t = new ToolTip(); 
      t.Content = "Something helpful"; 
      ((Button)sender).ToolTip = t; 
      return; 
     } 
     //Logic for handling button clicks goes here 
     MessageBox.Show("action 2"); 
    } 
+0

만약 당신이 그렇게하면 모든 버튼이로드시 바로 실행됩니다. 즉, 메시지 상자를 모두 또는 일부 또는 심지어 하나에 추가하면, 메시지 상자를 포함하는 모든 버튼이 양식을로드 할 때 실행됩니다. –

+1

예 이벤트 핸들러에 오버로드가 발생했습니다. 이상적이지는 않지만 일을합니다. 코드 –

+0

을 업데이트했습니다. 그것은 작동합니다! –

1
당신은 핸들러의 툴팁을 할당하지 않는

, 그래서 어떻게 어떤 일이해야합니까?

((Button)sender).ToolTip = t; 
+0

This only 누를 때 작동합니까? –

+0

@KirstyWhite : 예, 그렇습니까? 원하는게 뭐야? 귀하의 질문은 매우 모호합니다 ... –

+0

이것은 더 명확하게 제공 할 수 내 질문을 업데이 트했습니다. 내가 그것을 읽었을 때 나는 그것이 나에게 의미가 있다는 것을 깨달았다. –

0

정확하게 이해하면 버튼마다 다른 클릭 핸들러와 다른 툴팁이있는 '유형'버튼이 있어야합니다.

그런 경우 Button에서 파생 된 다른 클래스를 만들 수 있습니다 (예 : HelpfulButton, UnhelpfulButton ... 좋은 이름 선택 :).) 생성자에서 핸들러와 툴팁을 할당합니다.

그런 다음, 주요 코드에서, 당신은 다른 클래스를 통해 루프 및 주요 캔버스에 직접 인스턴스를 추가 할 수 있습니다.

또 다른 가능한 옵션은 명령을 사용하여 다른 "템플릿"단추를 만들고 단추를 서브 클래 싱하는 대신 속성을 복사하는 것입니다.이런 식으로 뭔가 :

foo.Click += routedEventHandler; 
foo.Loaded += routedEventHandler; 

을 그리고 다음과 같이 있습니다 : 당신이 다음이 경로를 이동하려면

Button helpfulTemplate = new Button { ToolTip = "blah" }; 
helpfulTemplate.Command = HelpfulCommand; 

Button unhelpfulTemplate = new Button { ToolTip = "bloh" }; 
unhelpfulTemplate.Command = UnhelpfulCommand; 

foreach(var template in new Button[] {helpfulTemplate, unhelpfulTemplate}) 
{ 
    var newCopy = new Button(); 
    //etc. 
    newCopy.ToolTip = template.ToolTip; 
    newCopy.Command = template.Command; 
} 
+0

내 foreach에서 무작위로 만들고 그것을 기본 폼에 3 개의 버튼을 배치하는 방법은 사용자 정의 툴팁과 버튼 이름을 작성하는 것입니다. 이 메소드는 3 개의 버튼을 호출하는 것을 중단합니다. 이제는 이름이 지정되지 않았고 명령은 여전히 ​​버튼에서만 일반화되었으므로 버튼 1은 그 버튼의 나머지 부분을 모두 말하지 않고 hello라고 말하지 않습니다. 또한 ICommand로 메소드 그룹을 변환 할 수 있습니까? –