我在网格上没有检测到PreviewMouseLeftDown单击事件的按钮。
经过测试,我发现问题出在<Grid PreviewMouseMove="onMouseMove" >
如果我删除PreviewMouseMove =“ onMouseMove”部分,则会检测到MouseDown事件,但是我需要该行代码,因为我还必须仅检测该网格内的鼠标位置。
XAML:
<Grid PreviewMouseMove="onMouseMove" Background="Transparent">
<ItemsControl Name="btnTableImageList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Content}"
Height="{Binding Height}"
Width="{Binding Width}"
Tag="{Binding Tag}"
Margin="{Binding Margin}"
Background="{Binding Background}"
HorizontalAlignment="Center"
PreviewMouseLeftButtonDown ="tblButton_MouseDown"
PreviewMouseLeftButtonUp ="tblButton_MouseUp"
Click="ClickHandlerTableBtn"
TextBlock.TextAlignment="Center" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
任何想法都值得欢迎。谢谢!
答案 0 :(得分:0)
我完全同意他们的观点,但也了解您……WPF和MVVM并不那么“容易”适应,我花了大约一年或更短的时间来学习,仍然有很多东西要学习。 在这种情况下,我只能建议您阅读一些有关WPF,DataBinding和ObservableCollection和ViewModel的教程(这些是您需要知道的关键字)。 1)创建一个ViewModel,您可以在其中定义一个ObservableCollection,ObservableCollection是一种列表,但是使用它可以自动更新View(几乎)。因此,当您启动应用程序时,您将阅读需要显示的按钮列表,然后将它们添加到ObservableCollection
对于您的测试将是这样的:
Button button1=new Button();
Button button2=new Button();
//define all dimensions/parameters of your button
MyObservableCollection.Add(button1);
MyObservableCollection.Add(button2);
然后在XAML中,您只需要指定ItemsControls(MyObservableCollection)的ItemsSource。这样,您就不再需要内部所有按钮的描述。
然后,当您单击添加按钮(针对您的情况)时,只需在类似
之类的代码后面进行编码Button newButton=new Button();
newButton.Height=defaultHeight...//width, background etc...
MyObservableCollection.Add(newButton);
再次提醒您,如果您不是WPF / MVVM的新用户,我建议您从更简单的示例开始,使用内部简单对象或列表框创建一个小的列表视图。
还可以为您建议这些网站: wpf-tutorial.com www.wpftutorial.net
答案 1 :(得分:0)
最后,它实际上可以正常工作。
为了进行测试,我设置了一个标签,并且在MouseMove事件中,我将“鼠标位置”发送到该标签,lblCoord.Content = Mouse.GetPosition(Application.Current.MainWindow);
如果使用MouseClick,我将发送lblCoord.Content="MouseClick";
如果出现MouseDown,我将发送lblCoord.Content="MouseDown";
。
我可以在lblCoord中看到鼠标坐标,可以看到MouseClick,但是它从未显示MouseDown。
但是,如果我在MouseDown事件中调用MessageBox,则一切正常。因此,我猜想XAML <Grid> PreviewMouseMove="onMouseMove"
即使在我不移动鼠标的情况下也能正常工作,因此它一直将坐标发送给Label,并且覆盖lblCoord.Content="MouseDown";
的速度比我看到的快。
此问题的答案是:不要与WPF一起使用,并且期望WinForms结果... 感谢大家的时间和精力!