2012-08-01 13 views
9

Tôi đã tìm thấy nhiều chủ đề tương tự ở đây, nhưng không có chủ đề nào dường như giải quyết vấn đề cụ thể của tôi.Ràng buộc Trình kích hoạt kiểu WPF vào thuộc tính phụ thuộc tùy chỉnh

Tôi cần làm nổi bật nền của hộp văn bản trong các điều kiện nhất định. Tôi đã tạo một thuộc tính Tô sáng và thử sử dụng trình kích hoạt trong một kiểu để đặt nó nhưng nó không thực sự làm nổi bật văn bản.

Đây là phong cách của tôi, đơn giản hóa:

<Style x:Key="TextBoxStyle" BasedOn="{StaticResource CommonStyles}"> 
    <Style.Triggers> 
     <Trigger Property="Elements:DataElement.Highlight" Value="True"> 
      <Setter Property="Control.Background" 
        Value="{DynamicResource EntryBoxHighlightBackground}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Elements được định nghĩa là:

xmlns:Elements="clr-namespace:MDTCommon.Controls.Forms.Elements"> 

Sau đó, tôi có phần mà phong cách được áp dụng:

<!-- Applies above style to all TextBoxes --> 
<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxContentHolder}" > 
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" /> 
    <!-- Overrides the default Error Style --> 
</Style> 

Trong mã phía sau lớp DataElement như sau:

public static readonly DependencyProperty HighlightProperty = 
    DependencyProperty.Register("Highlight", typeof(bool), typeof(DataElement)); 

public bool Highlight 
{ 
    get { return (bool)base.GetValue(HighlightProperty); } 
    set { base.SetValue(HighlightProperty, value); } 
} 

Một DataElement cuối cùng bắt nguồn từ UserControl và nó chứa tham chiếu đến đối tượng TextBox cũng như các đối tượng khác.

Trong lớp CustomForm chứa tất cả các đối tượng DataElement tôi có thông tin sau để đặt màu.

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow; 

Vì vậy, vấn đề đầu tiên là thiết lập thuộc tính nổi bật cho DataElement không gây nền textbox để vẽ bằng màu vàng.

Vấn đề khác là tôi nhận ra rằng tôi đang áp dụng kiểu này cho tất cả các hộp văn bản và tôi có thể có hộp văn bản trong các khu vực khác không thực sự nằm trong DataElement.

+0

Cố gắng thêm một setter 'nền' cho phong cách của bạn –

+0

tôi có một setter cho nó. – WPFNewbie

+0

Tôi đã loại bỏ rất nhiều Phong cách để giữ cho nó đơn giản và tập trung vào các lĩnh vực mà tôi nghĩ rằng vấn đề có thể xảy ra. – WPFNewbie

Trả lời

5

Thử chuyển đổi kích hoạt của bạn để một DataTrigger, và thêm một ràng buộc mà sẽ nhìn thẳng vào sự kiểm soát DataElement, như vậy:

<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True"> 
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/> 
</DataTrigger> 
+3

Tại sao? "' Kích hoạt''' đơn giản nên hỗ trợ các thuộc tính phụ thuộc, phải không? – boli