我想要做的是将事件处理程序添加到 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的新手,所以请保持温和。 :)
答案 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>