调试信息中缺少源信息

时间:2014-04-20 08:15:43

标签: c# wpf xaml exception foreach

我想要做的是将事件处理程序添加到 canvasBackground 中的控件,这样我就可以使用鼠标拖动将其所有子元素移动到不同的窗口位置。 但当它开始循环遍历 foreach 循环中的每个 Controls 时,它会引发异常:

  

XamlParseException发生在类型" AgentWindow.xaml "上调用构造函数   与指定的绑定约束匹配引发异常。行号' 3'和行位置' 9'。

     

此模块的调试信息中缺少源信息

AgentWindow.xaml.cs

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>

当我将GroupBox更改为Canvas时,所有这一切都开始了。我这样做是因为我无法弄清楚如何在GroupBox中访问这些按钮...我是wpf的新手,所以请保持温和。 :)

1 个答案:

答案 0 :(得分:0)

Canvas 不是 Control 。此外,儿童 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>