2009-03-13 29 views

Trả lời

27

Tôi đã sử dụng giải pháp này cho RichTextBox, nhưng tôi cho rằng nó cũng sẽ hoạt động đối với hộp văn bản chuẩn. Về cơ bản, bạn cần phải xử lý sự kiện LostFocus và đánh dấu nó là xử lý.

protected void MyTextBox_LostFocus(object sender, RoutedEventArgs e) 
    {  
    // When the RichTextBox loses focus the user can no longer see the selection. 
    // This is a hack to make the RichTextBox think it did not lose focus. 
    e.Handled = true; 
    } 

Hộp văn bản sẽ không nhận ra nó bị mất tiêu điểm và vẫn hiển thị lựa chọn được đánh dấu.

Tôi không sử dụng ràng buộc dữ liệu trong trường hợp này, vì vậy có thể điều này sẽ làm hỏng liên kết hai chiều. Bạn có thể buộc phải ràng buộc trong trình xử lý sự kiện LostFocus của bạn. Một cái gì đó như thế này:

 Binding binding = BindingOperations.GetBinding(this, TextProperty); 
    if (binding.UpdateSourceTrigger == UpdateSourceTrigger.Default || 
     binding.UpdateSourceTrigger == UpdateSourceTrigger.LostFocus) 
    { 
     BindingOperations.GetBindingExpression(this, TextProperty).UpdateSource(); 
    } 
+0

Điều này đã hiệu quả! Cảm ơn! –

+0

+1 Giải pháp tuyệt vời - đã giúp tôi tạo tính năng tìm kiếm ... Thx – reSPAWNed

+1

Điều này chủ yếu là hoạt động, nhưng ngắt cuộn trên RichTextBoxes không tập trung với các lựa chọn trong đó - vùng chọn không di chuyển với văn bản. – Cameron

10

Một tùy chọn khác là xác định phạm vi tiêu điểm riêng trong XAML để duy trì lựa chọn trong Hộp văn bản đầu tiên.

<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition/> 
    <RowDefinition/> 
    </Grid.RowDefinitions> 

    <TextBox Grid.Row="0" Text="Text that does not loose selection."/> 
    <StackPanel Grid.Row="1" FocusManager.IsFocusScope="True"> 
    <TextBox Text="Some more text here." /> 
    <Button Content="Run" /> 
    <Button Content="Review" /> 
    </StackPanel> 
</Grid> 
+1

Có một minh họa trực quan về điều này tại http://wpfhacks.blogspot.com/2009/06/correct-way-keep-selection-in-textbox.html – mtlynch

+0

Giải pháp này là tiện lợi hơn cho tôi. – tharibo

2
public class CustomRichTextBox : RichTextBox 
{ 
    protected override void OnLostFocus(RoutedEventArgs e) 
    { 

    } 
} 
Các vấn đề liên quan