我在使用Windows Universal App时正在学习XAML / C#。
该程序允许在棋盘上拖放图像,棋盘是一个8行8列的网格。每个网格单元都有一个Rectangle和一个Image。拖放工作,将图像拖动到图像。在拖动开始事件和放置事件时,后面的C#代码获取图像源(在拖动开始事件上)和图像目标(在放置事件上)。源和目标都可用作开始拖动事件和放置事件的sender参数。没问题。我还希望在后面的C#代码中访问与Image在同一网格单元格中的Rectangle,如下面的XAML代码所示。
有没有办法将属性添加到Image的XAML代码中,以引用同一网格单元格中的Rectangle?
<Rectangle Grid.Row="2" Grid.Column="0" Fill="{Binding Source={StaticResource queenModel0}, Path=Color, Mode=TwoWay}" />
<Image Name="Image0" Grid.Row="2" Grid.Column="0" Source="{StaticResource imageSource}" Tapped="OnImageTapped" AllowDrop="True"
CanDrag="{Binding Source={StaticResource queenModel0}, Path=HasQueen, Mode=TwoWay}"
Opacity="{Binding Source={StaticResource queenModel0}, Path=Opacity, Mode=TwoWay}"
DragEnter ="Image_DragEnter" DragLeave="Image_DragLeave" DragOver="Image_DragOver" DragStarting="Image_DragStarting" DropCompleted="Image_DropCompleted" Drop="DropQueen" />
答案 0 :(得分:0)
我至少可以想到两种可能的方法:
选项#1:
按行/列索引检索Rectangle
:
int row = Grid.GetRow(sender), column = Grid.GetColumn(sender);
Rectangle rectangle = GetChildForRowColumn<Rectangle>(grid1, row, column);
其中:
T GetChildForRowColumn<T>(Grid grid, int row, int column)
{
foreach (Rectangle child in grid.Children.OfType<T>())
{
if (Grid.GetRow(child) == row && Grid.GetColumn(child) == column)
{
return child;
}
}
}
选项#2:
将Tag
属性绑定到相关的Rectangle
对象:
<Rectangle x:Name="rect20" Grid.Row="2" Grid.Column="0" Fill="{Binding Source={StaticResource queenModel0}, Path=Color, Mode=TwoWay}" />
<Image Tag="{x:Reference Name=rect20}" Name="Image0" Grid.Row="2" Grid.Column="0" Source="{StaticResource imageSource}" Tapped="OnImageTapped" AllowDrop="True"
CanDrag="{Binding Source={StaticResource queenModel0}, Path=HasQueen, Mode=TwoWay}"
Opacity="{Binding Source={StaticResource queenModel0}, Path=Opacity, Mode=TwoWay}"
DragEnter ="Image_DragEnter" DragLeave="Image_DragLeave" DragOver="Image_DragOver" DragStarting="Image_DragStarting" DropCompleted="Image_DropCompleted" Drop="DropQueen" />
然后在您的代码隐藏中:
Rectangle rectangle = (Rectangle)((FrameworkElement)sender).Tag;
可能还有其他方法可以实现相同的目标,但上述内容对我来说似乎很合理。