2011-09-09 10 views
4

に私はこれをしたい: のMouseEnter/MouseLeave RowDefinition

https://github.com/rails/rails/commit/f50aeda2f73b47c47664e3651c638ba624418b8b

は参照してくださいどのように、ソースコードの行の上にマウスカーソルが移動し、画像/ボタンは、テーブルの左側に表示されますか?それ。

グリッドがあり、RowDefinitionにはMouseEnterイベントとMouseLeaveイベントがあります。これらのイベントは、(透明であっても)Backgroundプロパティが必要で、RowDefinitionにBackgroundプロパティがないため、これらのイベントは役に立たず、決して発動できません(私が間違っていれば修正してください)。

マウスを動かすまでに、新たに表示されるボタンは既に消えてしまっているので、すべてのセルのすべての要素にMouseEnterをフックできません。

どうすればこの問題を解決できますか?彼らはFrameworkContentElements(というよりもFrameworkElements)であり、彼らは任意のマウスイベントを発生させません理由ですので、

答えて

2

RowDefinitionsColumnDefinitionsがビジュアルツリーには、実際にはない、彼らはVisualsではありません。彼らはちょうどGridによってその子を配置するために使用されます。頭に浮かぶ

一つのアプローチは、これらのイベントはGridまたはGrid自体に任意の子のために提起されたときに通知を受けるためにGridに添付イベントMouse.MouseMoveMouse.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するかどうかを決定するためにGridMouseOverRowDefinitionImageためGrid.Rowを比較するだけですMouseOverRowDefinitionためGridを照会することができます。例えば、プロジェクトのための
http://dl.dropbox.com/u/39657172/MouseOverGridRowDefinition.zip

+0

感謝を:

は、あなたがそれを試してみたい場合は、ここでこれを行い、小さなサンプルアプリケーションをアップロード!私はまだコードで動作するマルチバインディングxamlを取得しようとしている、私は少し失われている... – epalm

関連する問題