내 경우에는 WPF UserControls를 사용하여 주로 Windows Forms 솔루션 내부에서 WPF를 실행하고있어 순수 WPF 환경에서 작동하는지 확실하지 않은 해결 방법을 찾았습니다.
BringIntoFocus()를 즉시 호출하는 대신 나중에 타이머에 의해 처리되는 큐에 추가하여 연기합니다. 예를 들어 :
System.Windows.Forms.Timer DeferredActionTimer = new System.Windows.Forms.Timer() { Interval = 200 };
Queue<Action> DeferredActions = new Queue<Action>();
void DeferredActionTimer_Tick(object sender, EventArgs e) {
while(DeferredActions.Count > 0) {
Action act = DeferredActions.Dequeue();
act();
}
}
폼의 생성자에서
, 또는 OnLoad 이벤트에 추가 : 마지막으로
DeferredActionTimer.Tick += new EventHandler(DeferredActionTimer_Tick);
DeferredActionTimer.Enabled = true;
를 대신 직접 TextPointer.Paragraph.BringIntoView();
를 호출, 다음과 같이 호출 :
DeferredActions.Enqueue(() => TextPointer.Paragraph.BringIntoView());
주 Windows Forms 타이머가 (메시지 펌프 루프를 통해) 주 스레드에서 이벤트를 끕니다. 다른 타이머를 사용해야하는 경우 약간의 추가 코드가 필요합니다. System.Threading.Timer
이 아닌 System.Timers.Timer
을 사용하는 것이 좋습니다 (좀 더 스레드로부터 안전함). Dispatcher.Invoke
구조로 작업을 래핑해야합니다. 제 경우에는 WinForms 타이머가 매력처럼 작동합니다.
무슨 langage/SDK에 대해 이야기하고 있습니까? –
죄송합니다, 세부 사항을 잊어 버린 문제가 너무 깊었습니다 ... 프로젝트는 C# 및 WPF입니다. .NET 3.5을 사용 중입니다. 모든 아이디어를 얻을 수 있습니다. – pavele
나는이 문제도 다루고 있으며, [다른 문제]와 관련이 있다고 생각합니다. (http://social.msdn.microsoft.com/Forums/vstudio/en-US/d9fdf56c-a651-4c9b-b0c6- 9a74eca3840d/읽기 전용 속성 선택 - on-a-flowdocumentscrollviewer 포럼 = wpf # 2960f16a-c66d-4ef7-b91a-eadb655a3762) 여기서 사용자가 창을 클릭하기 전에 선택을 설정할 수 없습니다. 마이크로 소프트가 이러한 문제를 수정하지 않는다는 것은 상당히 좌절스러운 일입니다. WPF와 같은 느낌은 소수의 소수에서만 사용됩니다. –