2009-08-03 41 views
20

Tôi đang cố tắt hiệu ứng MouseOver trên các nút hoặc ít nhất là thay đổi màu của nó, trong WPF.Làm thế nào để bạn vô hiệu hóa hiệu ứng MouseOver trên một Nút trong WPF?

Tôi đang sử dụng phong cách sau:

<Style x:Key="Borderless" TargetType="{x:Type Button}"> 
      <Setter Property="OverridesDefaultStyle" Value="True"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type Button}"> 
         <Button Background="{TemplateBinding Control.Background}" 
           Focusable="False"> 
          <ContentPresenter 
        Margin="{TemplateBinding Control.Padding}" 
        HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" 
        VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" 
        SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" 
        ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" 
        RecognizesAccessKey="True" 
        Content="{TemplateBinding ContentControl.Content}" /> 
          </Button> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

trong Window.Resources, mà tôi nghĩ sẽ ghi đè lên tất cả các hành vi mặc định. Nhưng nó không.

Mọi đề xuất?

Trả lời

37

Nhìn những gì mẫu kiểm soát của bạn nắm tới:

<ControlTemplate TargetType="{x:Type Button}"> 
    <Button> 
     <ContentPresenter/> 
    </Button> 
</ControlTemplate> 

Bạn đang nói, "Tôi muốn thay thế giao diện của nút của tôi với ... một nút." Việc sử dụng ControlTemplate là thay thế cây trực quan của điều khiển. Vì vậy, bạn đang thay thế cây hình ảnh của nút hiện tại bằng một nút khác. Nếu bạn muốn bắt đầu một nút từ đầu, hãy thử sử dụng nút SimpleStyles:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="MinHeight" Value="23"/> 
    <Setter Property="MinWidth" Value="75"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Border Name="Border" CornerRadius="2" BorderThickness="1" 
        Background="#C0C0C0" 
        BorderBrush="#404040"> 
       <ContentPresenter Margin="2" 
           HorizontalAlignment="Center" 
           VerticalAlignment="Center" 
           RecognizesAccessKey="True"/> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsKeyboardFocused" Value="true"> 
        <Setter TargetName="Border" 
          Property="BorderBrush" Value="#202020" /> 
       </Trigger> 
       <Trigger Property="IsDefaulted" Value="true"> 
        <Setter TargetName="Border" 
          Property="BorderBrush" Value="#202020" /> 
       </Trigger> 
       <Trigger Property="IsMouseOver" Value="true"> 
        <Setter TargetName="Border" 
          Property="Background" Value="#808080" /> 
       </Trigger> 
       <Trigger Property="IsPressed" Value="true"> 
        <Setter TargetName="Border" 
          Property="Background" Value="#E0E0E0" /> 
        <Setter TargetName="Border" 
          Property="BorderBrush" Value="#606060" /> 
       </Trigger> 
       <Trigger Property="IsEnabled" Value="false"> 
        <Setter TargetName="Border" 
          Property="Background" Value="#EEEEEE" /> 
        <Setter TargetName="Border" 
          Property="BorderBrush" Value="#AAAAAA" /> 
        <Setter Property="Foreground" Value="#888888"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Lưu ý rằng mẫu này tạo nút đơn giản nhất có thể: đường viền chứa nội dung nút. Nó không sử dụng một nút khác được nhúng bên trong khuôn mẫu.

+1

Điều đó thật tuyệt, Charlie. Bây giờ tôi hiểu rồi. Chúc mừng. – jarmond

+0

Cảm ơn bạn vì Charlie này, nó đã giúp rất nhiều. – billb

+1

Điều này đã cứu mạng tôi, cảm ơn. Tôi phải đi qua một người dùng tạo bố trí với các nút trong suốt, nhưng hiệu ứng di chuột đã hủy hoại kế hoạch của tôi. – mico

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