2011-02-11 4 views
0

내가 할 수있는 내가 내가 찾은 초점은 UserControl을 WPF에 설정되어 있지

데이터 그리드

의 첫 번째 행에 초점을 설정하려면 사용자 정의 컨트롤 에 데이터 그리드를 사용하고 사용자 컨트롤 항목에 초점을 설정할 수 없습니다 다음 코드

int index = 0; 

dgAccountInfo.SelectedItem = winAccountInfoGrid.dgAccountInfo.Items[index]; 
dgAccountInfo.ScrollIntoView(winAccountInfoGrid.dgAccountInfo.Items[index]); 

DataGridRow dgrow = (DataGridRow)dgAccountInfo.ItemContainerGenerator.ContainerFromIndex(index); 

if (dgrow != null) 
{ 
    dgAccountInfo.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)) 
}; 

위의 코드를 실행하면 나는 ContainerFromIndex 방법은 항상 내가 다음 링크를 발견 null의 문제를 제거하기 위해 널 (null)

을 반환 발견

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/ab95dd62-995f-481a-a765-d5efff1d559c/

나는,

답변

-1

코드에서 사용하고있는 것으로 나타납니다

덕분에 내 질문을 읽기위한 데이터 그리드에 설정되어 있지 않은 초점 여전히 위의 링크 사용하여 널 (null) 문제가 밖으로 나와 있지만, 당신은 첫 번째 항목에만 초점을 설정하려는 경우 불필요한 데이터 바인딩입니다. 유일한 의도는 데이터 격자의 포커스 (선택된 인덱스)를 설정하는 것이지, 하나의 코드 블록에서 수행 할 수 있습니다.

if (dgAccountInfo.HasItems){  
    dgAccountInfo.SelectedIndex = 0; 
} 

를 구축하여 데이터 그리드 실제로 항목을 (그렇지 않으면, 코드의 다음 줄은 예외를 슬로우)가 보장합니다. DataGrid에 항목이있는 경우 구조 내에 코드를 실행합니다. DataGrid에 항목이 없으면 코드 오른쪽으로 건너 뜁니다. 구조, 첫 번째로 데이터 그리드의 selectedIndex의 설정하면 뭔가 내부

일어날 않는 오프 기회에, 어쨌든 만들 경우

당신은 당신의 데이터 그리드에 항목이없는 계획이 없다하더라도, 당신이 포함되어야한다 목. 목록 상자와 마찬가지로 DataGrid는 "0부터 시작합니다."즉 첫 번째 항목의 인덱스가 0임을 의미합니다. DataGrid에서 아무 것도 선택하지 않으려면 선택된 인덱스를 "-1"로 설정하십시오.

DataGrid의 항목이 일반적으로 변경되므로 결국 "SelectedIndex"설정이 "SelectedItem"설정보다 훨씬 안정적입니다.

원하는 경우 데이터 격자에 항목이없는 경우 다른 작업을 수행하려는 경우 #else 문을 위의 코드 (endif 바로 위)에 포함 할 수 있습니다.

도움이 되었기를 바랍니다.

+0

-1이 C#입니까? – user7116

+0

예, 그렇습니다. MSDN을 사용하여 구문을 교차 검사했습니다. 내가 아는 사람이라면 내 게시물을 편집하거나 댓글/답변에 수정을하는 것이 더 생산적 일 수 있습니다. – CodeMouse92

+0

의사 - 전 처리기'# if'를 코드 블록에서'if' 문과 혼합하는 경우, C# 의사 전 처리기에서 기호가 정의되어 있는지 또는 정의되어 있지 않은지를 확인하는 간단한 검사 만 허용됩니다. 또한 C#에서'='는 관계 연산자가 아닌 대입 연산자입니다. '=='은 동등한 연산자입니다. 근본적으로 C# 마크를 벗어난 것처럼 보이기 때문에 코드를 편집하는 것이 적절하다고 생각하지 않았습니다. – user7116

관련 문제