RowDefinitions
とColumnDefinitions
がビジュアルツリーには、実際にはない、彼らはVisuals
ではありません。彼らはちょうどGrid
によってその子を配置するために使用されます。頭に浮かぶ
一つのアプローチは、これらのイベントはGrid
またはGrid
自体に任意の子のために提起されたときに通知を受けるためにGrid
に添付イベントMouse.MouseMove
とMouse.MouseLeave
を使用することです。 Mouse.MouseMove
イベントハンドラで
<Grid Mouse.MouseMove="Grid_MouseMove"
Mouse.MouseLeave="Grid_MouseLeave"
Background="Transparent">
我々はGrid
に対するマウス位置を取得し、MouseOverRowDefinition
のように、添付プロパティでは、現在のマウスでhooveredされているRowDefinition
計算し、それを保存することができます。
private void Grid_MouseMove(object sender, MouseEventArgs e)
{
Grid grid = sender as Grid;
Point mousePoint = e.GetPosition(grid);
double heightSum = grid.RowDefinitions[0].ActualHeight;
int activeRow = 0;
for (; heightSum < mousePoint.Y; activeRow++)
{
heightSum += grid.RowDefinitions[activeRow].ActualHeight;
}
GridExtensions.SetMouseOverRowDefinition(grid, activeRow);
}
// No RowDefinition is beeing hoovered, set MouseOverRowDefinition to -1
private void Grid_MouseLeave(object sender, MouseEventArgs e)
{
Grid grid = sender as Grid;
GridExtensions.SetMouseOverRowDefinition(grid, -1);
}
今、私たちはその残りの部分は、それがVisible
するかどうかを決定するためにGrid
MouseOverRowDefinition
にImage
ためGrid.Row
を比較するだけですMouseOverRowDefinition
ためGrid
を照会することができます。例えば、プロジェクトのための
http://dl.dropbox.com/u/39657172/MouseOverGridRowDefinition.zip
感謝を:
は、あなたがそれを試してみたい場合は、ここでこれを行い、小さなサンプルアプリケーションをアップロード!私はまだコードで動作するマルチバインディングxamlを取得しようとしている、私は少し失われている... – epalm