2010-03-09 2 views
3

사용자가 Datagrid에서 행을 선택한 다음 "기록 시작"버튼을 클릭하는 프로그램이 있습니다. "녹음 중"이 발생하는 동안 DataGrid에서 선택한 값을 변경할 수 없으므로 IsEnabled를 false로 설정합니다. 그러나 DataGrid를 사용하지 않도록 설정하면 DataGrid의 SelectedItem 프로퍼티에 바인딩 된 모든 행이 스크류되는 선택된 행의 선택이 취소됩니다.WPF Datagrid에서 컨트롤을 사용할 수없는 경우 행을 선택 취소합니다.

컨트롤이 비활성화되어 있어도 데이터 격자 행을 선택한 상태로 유지할 수있는 방법이 있습니까?

편집 : 당신이 정말로 여전히 '기록'행동하지만,이 영상과 상호 작용 방금하지 않는 이유는, 같은보고 유지하려면이 Windows Vista에서 발생하지 않지만, 윈도우 7

답변

0

에서와 선택에 따라 발사 된 이벤트에 체크를 추가하여 레코딩이 일어나지 않았는지 확인하고 e.Handled = true로 설정하십시오.

또는 IsHitTestVisible = false로 설정하여 컨트롤을 완전히 비활성화하지 않고 컨트롤에서 작업을 수행하지 못하게 할 수 있습니다.

희망이 있습니다.

+0

SelectionChanged 이벤트의 e.Handled 설정이 작동하지 않았습니다. 선택이 이미 변경 될 때까지 (즉, 너무 늦은 후에) 이벤트가 호출되지 않는 것 같습니다. DataGrid에서 "PreviewSelectionChanged"와 동일한 종류의 항목을 찾을 수 없습니다. 반면에 IsEnabled가 아닌 IsHitTestVisible을 설정하면 시각적 인면이 변경되지 않는 것을 제외하고는 정상적으로 작동하는 것 같습니다. 나는 그것이 내 목적에 맞는 것 같아. 감사합니다. – Mike

+0

아, 시각적 인 상태를 바꾸려고한다는 것을 몰랐습니다. DataGrid를 비활성화 할 때 추가 이벤트가 발생하지 않는지 확인할 수 있습니다. 난 그냥 우리의 구현 중 하나를 선택이 행을 볼 수 있는지 여부를 확인하지 않았다. –

0

죄송합니다.이 게시물이 조금 오래되었음을 알고 있지만 다른 곳에서는이 솔루션을 찾을 수 없습니다.

Vista와 관련이있는 것 같지 않지만 Toolkit의 2 월 릴리즈와 관련이 있습니다.

Jeff Wain이 제시 한대로 IsHitTestVisible = false를 설정할 수 있지만 Mike는 말한 것처럼 다른 것으로 보이지는 않습니다. 또한 키보드 입력을 사용할 수 없습니다.

내 솔루션은 동일한 행과 열의 Grid에 DataGrid를 반투명의 회색 사각형으로 배치하는 것입니다. 이렇게하면 서로 겹치게됩니다. Grid가 DataGrid 위에 있는지 확인하기 위해 Grid에 사각형을 놓아야합니다. '비활성화'할 때 사각형을 볼 수있게 만듭니다. 이렇게하면 목록이 희미하게 보이고 마우스 입력이 비활성화되지만 키보드 입력은 여전히 ​​비활성화되지 않습니다.

키보드를 비활성화하려면 'PreviewKeyDown'을 가로 채고 e.Handdled = true로 설정해야합니다. 이렇게하면 다른 항목을 선택할 수 없지만 더 이상 작동하지 않는 탭과 같이 탭하면 재미있는 작업을 계속 수행합니다. 아마도 tab stop이 아니라 focusable이 아닌 것으로 설정하는 것도이 문제를 해결할 것입니다. 그러나 선택을 비활성화하는 것은 제가 정말로 신경 쓰는 것입니다.

0

IsHitTestVisible = false는 마우스 입력을 비활성화합니다.

키보드 입력을 사용하지 않도록 설정하려면 Focusable = false를 설정하십시오.

둘 모두는 자식 컨트롤 (텍스트 상자, 체크 상자 등)이 입력을 허용하지 않도록 기본 DataGrid 열의 ElementStyle 및/또는 ElementEditingStyle 스타일을 통해 설정해야합니다.

대부분 스타일에서 트리거를 사용해야하고 IsRecording 값에 바인딩해야합니다.

또한 같은 스타일로 Opacity = 0.4로 설정하여 "비활성화 된"컨트롤의 모양을 변경할 수도 있습니다. 이렇게하면 약간의 사용감을 느낄 수 있습니다.

관련 문제