我有一個很多單元格的網格,其中一些是空的。我想確定MouseDown事件發生時哪個單元格是鼠標。那怎麼可能?通過座標點擊網格中的哪個單元格?
0
A
回答
1
要記住的是,有一個透明背景的控制不會產生它的透明區域活動的第一件事。爲所需網格設置顏色,或將其綁定到網格所在窗口的背景顏色,否則事件不會觸發。
此代碼示例演示了一種計算方法,用於在給定MouseMove
事件的情況下確定網格元素位置。 ButtonClick
事件參數非常相似。該樣本的相關方法是ColumnComputation
和RowComputation
,它們在控制和列或行定義上進行線性分析。該示例在UI元素上運行。
Form類:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void InnerGrid_PreviewMouseMove(object sender, MouseEventArgs e)
{
this.XCoordinate.Text = e.GetPosition(InnerGrid).X.ToString();
this.YCoordinate.Text = e.GetPosition(InnerGrid).Y.ToString();
this.ColumnPosition.Text = ColumnComputation(InnerGrid.ColumnDefinitions, e.GetPosition(InnerGrid).X).ToString();
this.RowPosition.Text = RowComputation(InnerGrid.RowDefinitions, e.GetPosition(InnerGrid).Y).ToString();
}
private double ColumnComputation(ColumnDefinitionCollection c, double YPosition)
{
var columnLeft = 0.0; var columnCount = 0;
foreach (ColumnDefinition cd in c)
{
double actWidth = cd.ActualWidth;
if (YPosition >= columnLeft && YPosition < (actWidth + columnLeft)) return columnCount;
columnCount++;
columnLeft += cd.ActualWidth;
}
return (c.Count + 1);
}
private double RowComputation(RowDefinitionCollection r, double XPosition)
{
var rowTop = 0.0; var rowCount = 0;
foreach (RowDefinition rd in r)
{
double actHeight = rd.ActualHeight;
if (XPosition >= rowTop && XPosition < (actHeight + rowTop)) return rowCount;
rowCount++;
rowTop += rd.ActualHeight;
}
return (r.Count + 1);
}
}
XAML形式:
<Window x:Name="window" x:Class="GridHitTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Name="OuterBorder" >
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" HorizontalAlignment="Center" >X Coordinate</TextBlock>
<TextBlock Grid.Column="1" HorizontalAlignment="Center" >Y Coordinate</TextBlock>
<TextBlock Grid.Column="2" HorizontalAlignment="Center" >Column</TextBlock>
<TextBlock Grid.Column="3" HorizontalAlignment="Center" >Row</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" Name="XCoordinate">kjahsd</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" Name="YCoordinate">___ahsdjf</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="2" HorizontalAlignment="Center" Name="ColumnPosition">___ahsdjf</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="3" HorizontalAlignment="Center" Name="RowPosition">___ahsdjf</TextBlock>
<Grid Name="InnerGrid" Margin="20,45,20,10" Grid.ColumnSpan="4" Grid.RowSpan="3" Background="{Binding Background, ElementName=window}" PreviewMouseMove="InnerGrid_PreviewMouseMove" >
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
</Grid>
</Window>
1
將一個按鈕放入空單元格(或所有單元格中的按鈕,但其他項目存在時隱藏的樣式並使該單元格不爲空)。然後,當用戶點擊該單元格,報告小區如
private void OnButtonClick(object sender, RoutedEventArgs e)
{
var buttonClicked = sender as Button;
var gridRow = (int)buttonClicked.GetValue(MyGrid.RowProperty);
var gridColumn = (int)buttonClicked.GetValue(MyGrid.ColumnProperty);
}
0
這裏是一個似乎比建議的正確答案更簡單的另一種選擇。
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
var element = (UIElement)e.Source;
int row = Grid.GetRow(element);
int column = Grid.GetColumn(element);
}
相關問題
- 1. 找出點擊單元格的座標
- 2. 獲取網格單元格通過鼠標點擊
- 3. 通過座標獲取單元格
- 4. 通過點擊增加單元格值
- 5. 單元格的哪一側被點擊
- 6. 將單元格分配給3乘3網格中的座標
- 7. jQuery點擊通過排除某些單元格的表格行
- 8. 通過點擊它們來更改網格單元格的顏色
- 9. 根據網格座標在DataGridView中獲取單元格值
- 10. UITableView單元格座標
- 11. KendoUI網格內嵌編輯:單元格雙擊重點單元
- 12. 確定單擊哪個JTable單元格
- 13. 如何通過點擊一個樹元素填充網格行?
- 14. 通過按鈕點擊在第二張表格中添加一個單元格
- 15. 單元格在Excel中的座標
- 16. 在js/html/css中製作單元格的可點擊網格
- 17. 如何處理GXT 2.2網格中單元格的點擊?
- 18. 網格X和Y座標中的可點擊JLabels?
- 19. VBA:通過宏將ColC中單元格的單元格添加到另一個單元格中的單元格
- 20. 確定在WPF網格上單擊哪個單元格的方法?
- 21. 關於單元格在數據網格中點擊
- 22. WinRT Xaml:點擊網格中的單個元素
- 23. 如何在asp.net中點擊鼠標點擊gridview單元格?
- 24. C#表單點擊通過表格
- 25. 通過單擊獲取行表格中的HTML表格單元格值
- 26. 找出哪些合併表格單元格會被點擊?
- 27. 如何通過在網格視圖中關注單元格來選擇單元格聚焦的單元格值
- 28. 枚舉通過WPF中的網格單元格
- 29. UITableViewCellAccessoryCheckmark點擊單元格
- 30. 點擊單元格附件
您可以使用'Mouse.DirectlyOver作爲FrameworkElement',但我敢肯定,您正在使用錯誤的方法開始。發佈相關代碼和XAML。 –