2014-04-20 2 views
1

내가 원하는 것은 캔버스 백 그라운드 안에 이벤트 핸들러를 추가하는 것입니다. 마우스 드래그를 사용하여 모든 하위 요소를 다른 창 위치로 이동할 수있었습니다. 하지만 각 제어 통해 반복 시작될 때 루프의 foreach 에서는, 예외 발생 :소스 정보가 디버그 정보에서 누락되었습니다.

XamlParseException는 "AgentWindow.xaml" 유형의 생성자의 호출 발생 일치 지정된 바인딩 제약 조건이 예외를 던졌습니다. 행 번호 '3'및 행 위치 '9'.

public AgentWindow() 
{ 
    InitializeComponent(); 

    foreach (Control control in canvasBackground.Children) 
    { 
     control.PreviewMouseLeftButtonDown += this.MouseLeftButtonDown; 
     control.PreviewMouseMove += this.MouseMove; 
     control.PreviewMouseLeftButtonUp += this.PreviewMouseLeftButtonUp; 
    } 
} 

AgentWindow.xaml :

<Canvas x:Name="canvasBackground"> 

     <Canvas Background="Black" Canvas.Right="10" Canvas.Top="10" Height="200" Width="153"> 

     <Button x:Name="btnF1" Content="f1" Height="56" Width="60" Margin="10,12,79,132" Background="#DDD"></Button> 
     <Button x:Name="btnF2" Content="f2" Height="56" Width="60" Margin="80,12,9,132" Background="#DDD"/> 
     <Button x:Name="btnF3" Content="f3" Height="56" Width="60" Margin="10,73,79,71" Background="#DDD"></Button> 
     <Button x:Name="btnF4" Content="f4" Height="56" Width="60" Margin="80,73,9,71" Background="#DDD"></Button> 
     <Button x:Name="btnF5" Content="f5" Height="56" Width="60" Margin="10,134,79,10" Background="#DDD"></Button> 
     <Button x:Name="btnF6" Content="f6" Height="56" Width="60" Margin="80,134,9,10" Background="#DDD"></Button> 

     </Canvas> 

     <Button x:Name="btnSomeButton" Content="someb" Height="56" Width="60" 
       Background="#FFFBFBFB" Canvas.Left="292" Canvas.Top="193"/> 

    </Canvas> 

모든

소스 정보는이 모듈에 대한 디버그 정보에서

AgentWindow.xaml.cs 누락 이건 내가 바뀌면 시작 됐어. 캔버스에 그룹 박스. 내가 GroupBox 내에서 버튼에 액세스하는 방법을 알아낼 수 없었기 때문에 그렇게했습니다 ... 저는 wpf에 익숙합니다. :)

답변

0

CanvasControl 없습니다. 또한 어린이는 UIElementCollection이므로 UIElement이 아닌 제어해야합니다.

foreach (UIElement control in canvasBackground.Children) 
{ 
    .... 
} 

참고로이 루프는 내부 ​​이벤트 버튼이 아니라 캔버스 캔버스와 버튼에 마우스 이벤트를 연결합니다. 내부 버튼을 원한다면 내부 캔버스의 자식을 반복해야합니다.


어쨌든 XAML을 사용하여 이벤트를 후킹 할 수 있습니다. 부모 요소 자체를 후크합니다.

<Canvas x:Name="canvasBackground" 
     PreviewMouseLeftButtonDown="MouseLeftButtonDown" 
     PreviewMouseMove="MouseMove" 
     PreviewMouseLeftButtonUp="PreviewMouseLeftButtonUp"> 

    <Canvas> 
     <Button x:Name="btnF1"/> 
     <Button x:Name="btnF2"/> 
     <Button x:Name="btnF3"/> 
     <Button x:Name="btnF4"/> 
     <Button x:Name="btnF5"/> 
     <Button x:Name="btnF6"/> 
    </Canvas> 

    <Button x:Name="btnSomeButton" Content="someb" Height="56" Width="60" 
      Background="#FFFBFBFB" Canvas.Left="292" Canvas.Top="193"/> 

</Canvas> 
+1

아 .. 너무 쉬웠습니다. 정말 고마워요! ;) – Edgar

관련 문제