2012-06-14 15 views
5

Tôi đang làm việc trên một ứng dụng WPF có nhiều màn hình và mọi màn hình đều có nhiều điều khiển trên đó. Nó rất khó để xác định điều khiển nào tập trung.Chọn một điều khiển WPF khi nó được lấy nét

Vì vậy, tôi muốn làm nổi bật điều khiển hiện đang tập trung vào nó. Nó có thể là textbox, button, combobox, listbox hoặc grid.

Sẽ tốt hơn nếu chúng tôi có thể thực hiện việc này bằng cách sử dụng kiểu và trình kích hoạt.

Cảm ơn

Trả lời

7

Bạn nên sử dụng trình kích hoạt cho sự kiện phù hợp. Trong trường hợp của bạn là IsFocused. Ví dụ đơn giản:

<Trigger Property="IsFocused" Value="true"> 
    <Setter Property="BorderBrush" Value="Red" /> 
    <Setter Property="BorderThickness" Value="1" /> 
</Trigger> 

Bạn nên sử dụng một thẻ Style, nếu bạn muốn áp dụng phong cách này cho một đặc biệt gõ control (sử dụng TargetType="{x:Type TextBox}", ví dụ).

Nếu bạn muốn áp dụng cho tất cả các kiểm soát loại trong ứng dụng của bạn, hơn là bạn nên xem xét sử dụng một phong cách cơ bản với chỉ loại như vậy kích hoạt và không chỉ kế thừa nó trong phong cách tùy chỉnh của bạn với sự giúp đỡ của BasedOn thuộc tính: <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseFocusStyle}">

Ví dụ về cách thực hiện điều này là câu hỏi SO: "How to make Style.Triggers trigger a different named style to be applied".

0

Tôi khuyên bạn nên sử dụng trạng thái trực quan trong các kiểu tùy chỉnh cho mọi điều khiển. Tất cả các điều khiển tiêu chuẩn sẽ hỗ trợ trạng thái trực quan này. Ví dụ, kiểm tra phong cách MSDN cho button bạn sẽ thấy có một trạng thái trực quan cho Tập trung. This Bài viết MSDN cũng có thể giúp bạn.

0

Bạn cũng có thể thử và tạo một adorner cho hành vi này; trong trường hợp bạn đang mở để sử dụng thư viện của bên 3'rd mã nguồn mở thì có một cái nhìn tại thực hiện này trên CodePlex, bạn cũng có thể đi qua đoạn code để có được ý tưởng về cách triển khai adorner của riêng bạn -

http://uiannotations.codeplex.com/wikipage?title=Adorners&referringTitle=Documentation

enter image description here

Một câu hỏi tương tự có thông tin chi tiết về các giải pháp khác - Reusable way to put a bright red box around whatever element currently has focus?