Cách nhắm mục tiêu tất cả các điều khiển (Kiểu WPF)


90

Tôi có thể chỉ định một kiểu áp dụng cho tất cả các phần tử không? Tôi đã thử

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

Nhưng nó không làm gì cả

Câu trả lời:


120

Các Stylebạn đã tạo được chỉ nhắm mục tiêu Controlvà không yếu tố xuất phát từ Control. Khi bạn không đặt, x:Keynó sẽ được đặt hoàn toàn thành TargetType, vì vậy trong trường hợp của bạn x:Key="{x:Type Control}".

Không có cách nào trực tiếp để xác định một Stylenhắm tất cả các yếu tố xuất phát từ TargetTypecác Style. Bạn có một số tùy chọn khác.

Nếu bạn có những điều sau đây Style

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

ButtonsVí dụ, bạn có thể nhắm mục tiêu tất cả

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

hoặc sử dụng kiểu trực tiếp trên bất kỳ phần tử nào, ví dụ: Button

<Button Style="{StaticResource ControlBaseStyle}" ...>

Tôi đã tự hỏi tại sao phong cách của tôi với loại mục tiêu FrameworkElementkhông được áp dụng cho tất cả các điều khiển của tôi - điều này đã trả lời câu hỏi đó!
qJake

4
Có thực sự điên rồ đến mức tôi phải chỉ định kiểu cho tất cả các loại điều khiển được đặt trên cửa sổ, không chỉ cho một số điều gốc chung cho tất cả mọi người ???
Ondřej

7

Như Fredrik Hedblad đã trả lời, bạn có thể hiệu ứng tất cả các yếu tố kế thừa từ quyền kiểm soát.

Nhưng bạn không thể áp dụng kiểu cho khối văn bản và nút có cùng kiểu chẳng hạn.

Để làm việc đó:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.