2011-01-12 41 views
15

Câu hỏi này có lẽ là một bản sao, nhưng tôi không thể tìm thấy nó trên SO.Áp dụng kiểu WPF cho nhiều điều khiển

Nếu tôi có vùng chứa Window, StackPanel, Grid, v.v. có cách nào để tôi có thể áp dụng Style cho tất cả các điều khiển của một loại nhất định, được chứa trong đó không?

tôi có thể áp dụng thay đổi tài sản, bằng cách sử dụng Container.Resources và thiết lập thay đổi cá nhân với một TargetType, nhưng khi tôi cố gắng thiết lập Style của mục tiêu, tôi nhận được một lỗi, nói với tôi rằng tôi không thể thiết lập Style.

Có cách nào để thực hiện việc này trong XAML không?

Trả lời

28

Sắp xếp, tùy thuộc vào những gì bạn đang cố gắng đặt. Nếu các thuộc tính là thuộc tính của một lớp cơ sở chung thì có, bạn có thể. Bạn cũng có nhiều tùy chọn trong WPF hơn Silverlight vì bạn có thể kế thừa kiểu. Ví dụ:

<Window.Resources> 
    <Style x:Key="CommonStyle" TargetType="FrameworkElement"> 
     <Setter Property="Margin" Value="2" /> 
    </Style> 
    <Style TargetType="StackPanel" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Grid" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}"> 
     <Setter Property="Background" Value="LimeGreen" /> 
    </Style> 
</Window.Resources> 

Kiểu chung, CommonStyle sẽ được kế thừa bởi 3 kiểu ẩn. Nhưng bạn chỉ có thể chỉ định các thuộc tính chung cho tất cả các lớp FrameworkElement. Bạn không thể đặt Nền trong CommonStyle vì FrameworkElement không cung cấp thuộc tính Nền. Vì vậy, mặc dù Grid và StackPanel có nền (được kế thừa từ bảng điều khiển) nó không phải là thuộc tính nền tương tự mà nút có (được kế thừa từ điều khiển.)

Hy vọng điều này sẽ giúp bạn trên con đường của bạn.

+0

Tuyệt vời, đó là những gì tôi cần, Cảm ơn bạn. – ocodo

+8

Nếu kiểu không có trường x: Key - nó sẽ áp dụng cho * tất cả * đối tượng thuộc loại đó. Vì vậy, * tất cả * StackPanels, Grids & Buttons sẽ có lợi nhuận đó. – DefenestrationDay

+0

Cảm ơn bạn @DefenestrationDay !!! –

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