【发布时间】:2012-06-22 15:56:25
【问题描述】:
我正在尝试从我的 Silverlight for WP7 应用程序中的坐标中找到 UIElement。
这是我的 XAML:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<Canvas x:Name="ContentPanel" Grid.Row="1">
<Rectangle Canvas.Top="20" Canvas.Left="20" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="90" Canvas.Left="20" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="160" Canvas.Left="20" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="20" Canvas.Left="90" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="90" Canvas.Left="90" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="160" Canvas.Left="90" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="20" Canvas.Left="160" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="90" Canvas.Left="160" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="160" Canvas.Left="160" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="20" Canvas.Left="230" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="90" Canvas.Left="230" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
<Rectangle Canvas.Top="160" Canvas.Left="230" Width="50" Height="50" Fill="Aqua" Tap="Rectangle_Tap" />
</Canvas>
还有我的代码隐藏:
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
}
private void Rectangle_Tap(object sender, GestureEventArgs e)
{
Rectangle r = (Rectangle)sender;
double x = (double)r.GetValue(Canvas.LeftProperty);
double y = (double)r.GetValue(Canvas.TopProperty);
Debug.WriteLine(x + "," + y);
var query = VisualTreeHelper.FindElementsInHostCoordinates(new Point(x - 70, y), ContentPanel).Union(
VisualTreeHelper.FindElementsInHostCoordinates(new Point(x + 70, y), ContentPanel)).Union(
VisualTreeHelper.FindElementsInHostCoordinates(new Point(x, y - 70), ContentPanel)).Union(
VisualTreeHelper.FindElementsInHostCoordinates(new Point(x, y + 70), ContentPanel)).Union(
VisualTreeHelper.FindElementsInHostCoordinates(new Point(x, y), ContentPanel));
foreach (UIElement element in query.OfType<Rectangle>())
{
// never goes here
ContentPanel.Children.Remove(element);
}
}
}
但问题是该方法永远不会返回我的矩形。
我的代码有什么问题?
提前感谢您的帮助。 最好的问候
【问题讨论】:
-
您能具体描述一下您想要达到的目标吗?
-
我的目的是检测触摸的uielement。这只是一个易于复制的简单示例
标签: silverlight windows-phone-7 uielement