2010-06-14 33 views
11

tôi muốn thiết lập một phong cách trên tất cả các TextBox điều khiển của tôi mà không được sau khi nó nhận được tập trung bàn phím:Cuộc gọi hàm trong mã XAML?

1) Thay đổi màu nền
2) Gọi .SelectAll() để làm nổi bật tất cả các văn bản

tôi có điều này cho đến nay:

<Style TargetType="TextBox"> 
<Style.Triggers> 
      <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
       <Setter Property="Background"> 
        <Setter.Value> 
         <SolidColorBrush Color="#FFFFD1D9"/> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
</Style.Triggers> 
</Style> 

có cách nào cũng gọi .SelectAll()? Cảm ơn.

Trả lời

19

Bạn có thể thực hiện việc này bằng cách sử dụng các hành vi được đính kèm.

Ví dụ

public static class TextBoxBehaviour 
{ 
    public static bool GetSelectAll(TextBoxBase target) 
    { 
     return (bool)target.GetValue(SelectAllAttachedProperty); 
    } 

    public static void SetSelectAll(TextBoxBase target, bool value) 
    { 
     target.SetValue(SelectAllAttachedProperty, value); 
    } 

    public static readonly DependencyProperty SelectAllAttachedProperty = DependencyProperty.RegisterAttached("SelectAll", typeof(bool), typeof(TextBoxBehaviour), new UIPropertyMetadata(false, OnSelectAllAttachedPropertyChanged)); 

    static void OnSelectAllAttachedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) 
    { 
     ((TextBoxBase)o).SelectAll(); 
    } 
} 

Cách sử dụng

<Style TargetType="{x:Type TextBox}" xmlns:behaviours="clr-namespace:Controls.Behaviours"> 
    <Style.Triggers> 
     <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
      <Setter Property="Background" Value="#FFFFD1D9"/> 
      <Setter Property="behaviours:TextBoxBehaviour.SelectAll" Value="True"/> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

Tài liệu tham khảo

NB: Không thể kiểm tra việc triển khai ở trên, về lý thuyết mặc dù nó chỉ hoạt động ™.

HTH,

+3

+1 Câu trả lời xuất sắc. Hầu như chính xác những gì tôi đã viết. Cá nhân tôi sẽ thay đổi cơ thể của phương thức để chỉ đơn giản là '((TextBoxBase) mục tiêu) .SelectAll()' để ném một ngoại lệ dễ hiểu nếu tài sản được sử dụng sai. Từ quan điểm QA, điều này tốt hơn trong thời gian dài hơn là âm thầm bỏ qua các lỗi như vậy: Bạn bắt các lỗi của mình lên phía trước thay vì để chúng ẩn nấp ẩn trong nhiều năm. –

+0

@Ray Burns: Tôi đồng ý. Đó là một thói quen xấu mà tôi đang cố gắng tránh xa. Tôi đã chỉnh sửa câu trả lời của mình. – Dennis

+0

Cảm ơn vì điều đó - nó hoạt động hoàn hảo. FYI, cho bất cứ ai muốn thực hiện điều này cho một PasswordBox: thực hiện một lớp PasswordBoxBehaviour riêng biệt và thay thế tất cả các lần xuất hiện của TextBoxBase bằng PasswordBox. – BCA

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