Tôi đang phát triển một điều khiển tùy chỉnh xuất phát từ Kiểm soát và được xác định bằng ControlTemplate. Sau khi tước bỏ tất cả chuông và còi, các màn hình kiểm soát chỉ có bốn textbox:Làm thế nào để ngăn chặn một điều khiển tùy chỉnh WPF tạo ra với mẫu kiểm soát từ bản vẽ tập trung xung quanh chính nó?
<Style TargetType="{x:Type local:MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyControl}">
<StackPanel Orientation="Horizontal">
<TextBox/>
<TextBox/>
<TextBox/>
<TextBox/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Vấn đề là sự kiểm soát có thể nhận được tập trung bàn phím và vẽ hình chữ nhật tập trung xung quanh bản thân (không phải một trong những textbox, nhưng xung quanh tất cả chúng). Điều này cho biết thêm một điểm dừng tab không cần thiết khi điều hướng thông qua các điều khiển trong cửa sổ.
Đặt tiêu điểm thành sai trên điều khiển tùy chỉnh (sử dụng setter trong kiểu) giải quyết vấn đề, nhưng giải pháp như vậy là hoàn hảo, vì nhà phát triển sử dụng điều khiển đó có thể đặt Focusible thành true. hành vi.
Tôi có thể trả lời sự kiện GotKeyboardFocus của điều khiển và tập trung vào TextBox đầu tiên khi toàn bộ điều khiển nhận được tiêu điểm, nhưng điều này sẽ không hoạt động đúng khi tabbing back (sử dụng Shift + Tab), TextBox đầu tiên sẽ nhận được tiêu điểm trong khi trường hợp như vậy, TextBox cuối cùng nên được tập trung đầu tiên.
Làm cách nào để ngăn toàn bộ kiểm soát tùy chỉnh chấp nhận tiêu điểm bàn phím, nhưng cho phép Hộp văn bản con hoạt động bình thường dưới dạng tab dừng?
Phải cố gắng thiết lập 'FocusVisualStyle' cho 'null'? –
Thật không may nó không hoạt động, nó chỉ đơn giản là ẩn hình chữ nhật lựa chọn mà không thay đổi hành vi, người dùng phải nhấn Tab hai lần để đến TextBox đầu tiên. – RaceRalph
Đặt 'Tập trung' thành' sai' quá. Một số nhà phát triển khác đặt nó trở lại 'true' là vấn đề của họ. Thật vậy, bạn nên ghi đè siêu dữ liệu cho 'FocusableProperty' sao cho nó mặc định là' false' cho điều khiển của bạn. –