【发布时间】:2013-03-22 20:34:16
【问题描述】:
我正在尝试通过重现 Apple AppStore 中的应用来练习 c#。
在应用程序中,有一个带有文本的矩形:"Touch me"。当您触摸它时,矩形会重新定位。
在您这样做几次后,文本会变为“请勿触摸我”。在这种情况下,您必须触摸矩形之外。
一切顺利,直到您必须触摸矩形之外的地方。
这是我的事件处理程序:
private void Canvas_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
{
if (click == 0)
{
if (rectangle1.IsMouseOver || textBlock1.IsMouseOver)
{
// reposition and stuff
if (clicks == 10)
{
// Change the value of the variable click to 1
click = 1;
textBlock1.Text = "Do Not Click me";
Canvas.SetLeft(textBlock1, 200);
}
}
}
else
{
if (rectangle1.IsMouseOver || textBlock1.IsMouseOver)
{
// Game Over
this.Close();
} else
{
// reposition and stuff
click = 0;
textBlock1.Text = "Click me";
Canvas.SetLeft(textBlock1, 225);
}
}
}
该程序可以完美运行,直到您必须在矩形外单击。
当您单击矩形时程序关闭,但当您在矩形之外单击时,什么也没有发生。 是否有任何事件处理程序可以完成我想要的任务?
这是我的 xaml
<Window x:Class="ClickMe.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="510" Width="525" ResizeMode="NoResize">
<Canvas Name="canvas" MouseLeftButtonDown="Canvas_MouseLeftButtonDown_1">
<Rectangle Fill="#FFF4F4F5" Name="rectangle1" HorizontalAlignment="Left" Height="38" Stroke="Black" VerticalAlignment="Top" Width="509" Canvas.Left="0" Canvas.Top="63"/>
<Label Name="label1" Content="0" Canvas.Left="57" Canvas.Top="446"/>
<Label Content="Klicks:" Canvas.Left="10" Canvas.Top="446"/>
<TextBlock Name="textBlock1" Canvas.Left="225" TextWrapping="Wrap" Text="Click Me" Canvas.Top="74" Margin="10,0,0,0"/>
</Canvas>
【问题讨论】:
-
视情况而定,我们需要查看 xaml。我们无法知道这个矩形包含什么——也许你可以为你的容器触发一个 MouseClick 事件?如果没有,请创建一个可以这样做的容器。
-
我添加了 xaml 文件。据我所知,矩形没有点击事件,这就是我使用 Canvas_MouseLeftButtonDown 事件的原因。
-
我没有在应用商店发布它,我只是尝试为 windows 重建应用程序,为了我自己的娱乐......
标签: c# wpf mouseevent