2009-10-19 39 views
7

Xin vui lòng không bị cuốn vào ví dụ của tôi, chỉ cần chịu với tôi vì lợi ích của câu hỏi:Trong WPF, làm thế nào để ngăn chặn phong cách của tôi bị ghi đè?

Trong ứng dụng WPF của tôi, nếu tôi muốn tất cả TextBoxes có nền "xanh", tôi sẽ dễ dàng đặt nó như vậy trong Application.Resources của tôi.

<Style TargetType="TextBox"> 
<Setter Property="Background" Value="Green" /> 
</Style> 

này hoạt động PERFECTLY ... (cảm ơn bạn WPF). Tuy nhiên, nếu tôi có một TextBox ở đâu đó trong ứng dụng của mình mà tôi muốn nối thêm một chút kiểu dáng vào ... I LOSE nền màu xanh lá cây của tôi.

Ví dụ:

<TextBox> 
<TextBox.Style> 
    <Style> 
    <Style.Triggers> 
    <Trigger Property="TextBox.IsMouseOver" Value="True"> 
    <Setter Property="TextBox.Foreground" Value="Red" /> 
    </Trigger> 
    </Style.Triggers> 
    </Style> 
</TextBox.Style> 
</TextBox> 

Đó TextBox sẽ một cách chính xác có Foreground màu đỏ khi chuột kết thúc, nhưng nền màu xanh lá cây là hoàn toàn bị mất. Vì vậy, câu hỏi là: Làm thế nào để tôi nói với WPF KHÔNG xóa sạch hoàn toàn tất cả các kiểu dáng đến từ trên chỉ vì tôi có một phong cách đơn giản, không mâu thuẫn, oh rất nhỏ được thêm vào một điều khiển ở đâu đó?

Trả lời

11

Bạn có thể kế thừa kiểu đã ghi đè bằng cách sử dụng "Dựa trên" trong tuyên bố Kiểu.

Trong tuyên bố cho phong cách thứ hai của bạn, hãy thử này:

<TextBox> 
<TextBox.Style> 
    <Style BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Style.Triggers> 
    <Trigger Property="TextBox.IsMouseOver" Value="True"> 
    <Setter Property="TextBox.Foreground" Value="Red" /> 
    </Trigger> 
    </Style.Triggers> 
    </Style> 
</TextBox.Style> 
</TextBox> 

Bạn cũng có thể căn cứ theo phong cách trên một phong cách đặt tên,

<Style x:Key=MyNamedStyle> 
</Style> 

<Style BasedOn="{StaticResource MyNamedStyle}" > 
</Style> 
+0

Đúng vậy, nhưng về cơ bản là giống như nói rằng "bạn phải thêm lại kiểu cho mọi thứ bạn muốn ghi đè ". :(Câu trả lời hay, nhưng tôi ghét giải pháp đó –

+0

Tôi nghĩ về nó nhiều hơn như là một thứ kiểu xếp tầng. Có thể có những nơi bạn KHÔNG muốn kế thừa các phần ghi đè kiểu khác của bạn, hoặc nơi bạn có các kiểu khác nhau cho Bằng cách này cho phép bạn kiểm soát nhiều hơn, theo cách này, bạn có thể kiểm soát nhiều hơn, vì vậy tôi không quan tâm nhiều đến điều này. –

+1

@Timothy, thuộc tính BasedOn có nghĩa là mở rộng kiểu từ loại được chỉ định, ngay cả trong OOPS bất cứ khi nào bạn kế thừa một lớp, trình biên dịch bạn thêm lại tất cả các chức năng của lớp cơ sở vào lớp mới. Thừa kế có nghĩa là giữ lại/sao chép tất cả mọi thứ và ghi đè một số phần –

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