Làm thế nào để thiết lập tập trung vào một yếu tố TextBox
trong WPFSet tập trung vào textbox trong WPF
tôi có mã này:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... nhưng nó không được làm việc.
Bất kỳ ý tưởng nào?
Làm thế nào để thiết lập tập trung vào một yếu tố TextBox
trong WPFSet tập trung vào textbox trong WPF
tôi có mã này:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... nhưng nó không được làm việc.
Bất kỳ ý tưởng nào?
Trong XAML:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
thử FocusManager.SetFocusedElement
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
Điều gì xảy ra nếu phần tử bạn muốn đặt tiêu điểm * là * phần tử mẹ o.O? –
FocusManager.SetFocusedElement (FocusManager.GetFocusScope (parentElement), parentElement); – Philter
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
MSDN:
Chỉ có thể có một yếu tố trên toàn bộ máy tính để bàn đã tập trung bàn phím. Trong WPF, phần tử có bàn phím tiêu điểm sẽ được đặt IsKeyboardFocused thành true.
Bạn có thể ngắt sau dòng thiết lập và kiểm tra giá trị của thuộc tính IsKeyboardFocused
. Ngoài ra, hãy kiểm tra xem bạn có thực sự đạt được dòng đó hay không hoặc bạn có thể đặt một số yếu tố khác để tập trung sau đó.
Hãy thử điều này: MyTextBox.Focus ();
Đây là câu trả lời thanh lịch nhất và không yêu cầu bạn chỉ định cha mẹ. Cảm ơn vì điều này, nó hoạt động tuyệt vời cho tôi! – dbeachy1
Không ai trong số này làm việc cho tôi như tôi đã sử dụng một mạng lưới chứ không phải là một StackPanel.
cuối cùng tôi đã tìm thấy ví dụ này: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
và sửa đổi nó như thế này:
Trong 'Resources' phần:
<Style x:Key="FocusTextBox" TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
</DataTrigger>
</Style.Triggers>
</Style>
Trong định nghĩa lưới của tôi:
<Grid Style="{StaticResource FocusTextBox}" />
Điều này cũng phù hợp với tôi. Phần còn lại thì không. Cảm ơn bạn đã liên kết, điều đó khá thú vị. Cũng thú vị rằng một điều đơn giản như vậy có thể rất phức tạp. – TravisWhidden
Câu trả lời ở trên hoạt động tốt bất kể nếu vùng chứa là Gird hoặc StackPanel. Vì cấu trúc lưới của bạn không rõ ràng nên khó có thể biết được điều gì đã xảy ra. Tốt đẹp để xem lựa chọn thay thế mặc dù. – usefulBee
Đối với tôi, đây cũng là người duy nhất hoạt động chính xác. Cách tốt đẹp. – OregonGhost
Không ai giải thích cho đến nay tại sao mã e trong câu hỏi không hoạt động. Tôi đoán là mã được đặt trong hàm tạo của Cửa sổ. Nhưng tại thời điểm này còn quá sớm để đặt tiêu điểm. Nó phải được thực hiện khi Window đã sẵn sàng để tương tác. Nơi tốt nhất cho mã là sự kiện được tải:
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
TRẢ LỜI TRƯỚC KHI SỬ DỤNG NÀY – Airhead
Tôi thích cách tiếp cận này cho những người khác ở trên vì nó giữ phù hợp với MVVM. –
Phần tử được tập trung chỉ đọc đúng Cách bạn có thể đặt trong xaml? Tôi đã sử dụng tính năng này và nó không hoạt động Style.Trình kích hoạt> –
WPFKK
@ user841612, kiểm tra liên kết sau và xác minh Assembly and Namespace https://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.focusedelement%28v=vs.110%29. aspx – usefulBee