2011-09-09 3 views
4

에 나는이 작업을 수행 할 수 : MouseEnter /하는 MouseLeave RowDefinition

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

은 참조하는 방법, 소스 코드의 줄 위에 마우스 커서를 이동, 이미지/버튼은 테이블의 왼쪽에 표시되는? 그.

그래서 내가 그리드 있고 RowDefinition MouseEnter 및 MouseLeave 이벤트가 있습니다. 이 이벤트는 쓸모가 없으며 결코 사용할 수 없다는 사실을 알았습니다. (내가 틀렸을 경우 수정하십시오.) Background 속성 (Transparent의 경우에도)이 필요하고 RowDefinition에는 Background 속성이 없으므로이 이벤트가 필요합니다.

모든 셀의 모든 요소에 MouseEnter를 연결할 수는 없습니다. 마우스를 움직이면 새로 보이는 버튼이 이미 사라져있을 것이기 때문입니다.

어떻게하면됩니까? 그들이 FrameworkContentElements (보다는 FrameworkElements)를하고 그들이 어떤 마우스 이벤트를 발생하지 않는 이유는 이후

답변

2

RowDefinitionsColumnDefinitions 그들은 Visuals 아닌, 시각적 트리에 실제로 아니다. 그것들은 단지 자식을 위치시키기 위해 Grid에 의해서만 사용됩니다. 마음에 오는

한 가지 방법은 이러한 이벤트가 Grid 또는 Grid 자체에있는 아이를 제기 할 때 GridMouse.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); 
} 

이제 우리는 MouseOverRowDefinition에 대한 Grid 그래서 나머지는 Visible 여부를해야하는지 결정하는 Grid에 대한 MouseOverRowDefinitionImage에 대한 Grid.Row 비교의 문제입니다 조회 할 수 있습니다. 예제 프로젝트에 대한
http://dl.dropbox.com/u/39657172/MouseOverGridRowDefinition.zip

+0

감사 :

당신이 그것을 시도하려는 경우 여기에이 작업을 수행 작은 샘플 응용 프로그램을 업로드! 난 여전히 코드에서 작동하도록 multibinding xaml 얻으려고 노력하고있어, 나는 조금 잃어버린 ... – epalm

관련 문제