2012-10-30 38 views
6

Tôi có nút wppf có hình nền.Vô hiệu hóa nút chuột có hiệu lực

Khi tôi di chuột qua nền sẽ trống và nút được hiển thị.

Làm cách nào để tắt hiệu ứng chuột?

<Button BorderBrush="{x:Null}" Content="Reset" BorderThickness="0"Foreground="White" Focusable="False"> 
         <Button.Background> 
          <ImageBrush ImageSource="button.png" /> 
         </Button.Background> 
+0

Có vẻ như bạn có trình kích hoạt sử dụng Trình quản lý trạng thái trực quan. Vui lòng cung cấp tất cả các xaml có liên quan. – Aphelion

+0

thử điều này; http://stackoverflow.com/questions/1302756/why-is-the-buttons-background-changing pro-tip, nếu bạn không có danh tiếng để nhận xét, hãy đăng "câu trả lời trival" và xem điều gì xảy ra. –

Trả lời

13

Đây là cách tôi tắt hiệu ứng di chuột trực quan trên các nút. Tôi đã để lại một số cài đặt của tôi chỉ để giúp bạn có cảm giác về cách chơi với trình kích hoạt và nội dung, cảm thấy tự do để thử nghiệm!

<Style TargetType="Button" x:Key="ImageButton" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Border Name="border" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Padding="{TemplateBinding Padding}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         CornerRadius="5" 
         Background="{TemplateBinding Background}"> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="BorderBrush" Value="Gainsboro" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Opacity" Value="0.25" /> 
         <Setter Property="BorderBrush" Value="Transparent" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

CHỈNH SỬA: Sử dụng cài đặt "BasedOn" + FocusVisualStyle thành null (2 dòng đầu tiên) sẽ loại bỏ hiệu ứng chuột. Mọi thứ khác chỉ là ví dụ. Tôi đã thêm một đường viền ở đó để chơi với nó thông qua một trigger (vì tôi muốn có hiệu ứng di chuột tùy chỉnh).

+2

Tôi không đồng ý với bài đăng này. Hai dòng đầu tiên không có hiệu lực trong ứng dụng của tôi. Tôi đã đọc ở nơi khác mà bạn không được phép ghi đè lên một phần mẫu và rằng bạn phải tạo một mẫu đầy đủ và hoàn chỉnh để nó hoạt động. Thật không may, tôi đã không tìm thấy một giải pháp làm việc nào được nêu ra nhưng lời khuyên trong bài đăng này chắc chắn đã không làm việc cho tôi. – shawn1874

+1

@ shawn1874 - "Tôi đã đọc ở nơi khác" có thể hưởng lợi từ một hoặc hai liên kết để giải thích các vấn đề tiềm ẩn của phương pháp này. Bạn đã thử mẫu đầy đủ thay vì chỉ hai dòng đầu tiên, trong một dự án trống không bị thay đổi bởi "ứng dụng của bạn", để xem liệu bạn vẫn không thể làm cho nó hoạt động? Với 7k lượt xem, 12 upvotes và không phải là một downvote duy nhất, tôi dưới ấn tượng rằng câu trả lời này không thỏa mãn nhất. – Joe

8

Trong ControlTemplate trong số Button thuộc tính Nền sẽ bị ghi đè bởi trình kích hoạt.
Bạn có thể thực hiện lại toàn bộ ControlTemplate và bỏ qua sự thay đổi nền hoặc chỉ cần thêm hình ảnh như nội dung của Button của bạn như vậy để tránh tất cả những biến chứng:

<Button.Content> 
    <Image Source="button.png" /> 
</Button.Content> 

Hoặc nếu bạn cần các văn bản trong đó là tốt :

<Button.Content> 
    <Grid> 
     <Image Source="button.png" /> 
     <TextBlock Text="Reset" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
    <Grid> 
</Button.Content> 
+0

Không thể sử dụng, vì tôi có Content = "Reset". –

+0

bạn vẫn có thể thực hiện bố cục phức tạp trong đó bằng cách sử dụng bảng để kết hợp hình ảnh của bạn và khối chữ với "Đặt lại" trong đó – MrDosu

+1

Cảm ơn giải pháp rất đơn giản –

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