2015-06-12 19 views
5

Tôi có một buttonStyle đơn giản được xác định cho TargetType của Button; nhưng thiết lập kiểu cho nút mang lại một ngoại lệ.TargetType không khớp với loại phần tử

<Window> 
    <Window.Resources> 
     <Style x:Key="buttonStyle" TargetType="{x:Type Button}"> 
      <Setter Property="Background" Value="Magenta"/> 
     </Style> 
    </Window.Resources> 
    <StackPanel Orientation="Horizontal"> 
     <Button Content="1" FocusVisualStyle="{StaticResource buttonStyle}"/> 
    </StackPanel> 
</Window> 

thông tin bổ sung: 'Button' TargetType không phù hợp với loại yếu tố 'kiểm soát'.


Hơn nữa, thiết lập các TargetType như Control loại bỏ các lỗi thời gian chạy, nhưng hình ảnh chiếc khuy áo không thay đổi khi nó được Focus.


Phong cách hoạt động khi thiết lập như Button.Style


Sửa Tôi có hai câu hỏi cụ thể:

  1. Tôi đồng ý với thực tế là FocusVisualStyle là một tài sản của FrameworkElementFrameworkContentElement, nhưng tại sao có lỗi khi đặt nút trên nút, de mặc dù thực tế là Style là namedstyle và không phải là typedstyle?

  2. Tại sao FocusVisualStyle không được hiển thị trên Button? Có phải nội dung được ghi đè trong nội bộ là Button.FocusVisualStyle bởi bất kỳ giá trị ưu tiên cao hơn nào như Mẫu, Trình kích hoạt hoặc Trình kích hoạt mẫu không?

Trả lời

5

a FocusVisualStyle cho phép bạn cung cấp phản hồi trực quan cho người dùng khi kiểm soát . Ví dụ: thêm Rectangle trông giống như đường viền của điều khiển.

A Style là giao diện của bản thân kiểm soát. Tất cả được giải thích là here.

FocusVisualStyle không phải là kiểu cho chính bản thân Button, đó là kiểu dành cho thời điểm Button được tập trung.

Xem here để biết thêm thông tin.

Tôi nghĩ bạn đang làm gì sau đây là Trigger.

<Style x:Key="buttonStyle" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <Trigger Property="IsFocused" Value="True"> 
      <Setter Property="Background" Value="Magenta"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Sau đó, bạn có thể thiết lập các Style của Button của bạn, như vậy:

<Button Style="{StaticResource buttonStyle}" ... /> 
+0

Tôi đồng ý, nhưng khi nút được tập trung, phong cách của nó doesn không thay đổi. Hay tôi có khái niệm sai? – Marshal

+1

Để làm rõ, 'FocusVisualStyle' không thể ảnh hưởng đến kiểu của' Nút'. Nó chỉ thêm vào kiểu hiện có của 'Nút'. Vấn đề bạn đang gặp phải là bạn đang cố gắng đặt kiểu 'Nút' thành' FocusVisualStyle' chỉ chấp nhận kiểu 'Điều khiển'. Tôi hy vọng tôi đã giải thích đủ. –

+0

Nó không hoạt động đối với tôi trong một thời gian khi tôi đã thiết lập cùng một thuộc tính của phong cách phù hợp cho điều khiển nút. Giá trị thuộc tính nội dòng được ghi đè những gì được đặt bởi trình kích hoạt kiểu "buttonStyle". Câu trả lời ngọt ngào! – RBT

1

Bạn nên sử dụng nó như thế này

 <Style x:Key="buttonStyle" TargetType="{x:Type Button}"> 
      <Style.Triggers> 
       <Trigger Property="IsFocused" Value="True"> 
        <Setter Property="Background" Value="Magenta" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

và thiết lập nó như thế này:

<Button Content="1" Style="{StaticResource buttonStyle}"/> 

Để thấy điều này tốt hơn:

  <Style x:Key="buttonStyle" TargetType="{x:Type Button}"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="Magenta" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

From MSDN

Tính năng kiểu hình ảnh lấy nét cung cấp một "mô hình đối tượng" chung cho giới thiệu phản hồi của người dùng trực quan dựa trên điều hướng bàn phím đến bất kỳ yếu tố giao diện người dùng . Điều này là có thể mà không áp dụng mẫu mới cho điều khiển hoặc biết thành phần mẫu cụ thể.

+0

Nhưng sau đó whats ý nghĩa của FrameworkElement.FocusVisualStyle – Marshal

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