2012-10-30 6 views
6

배경 이미지가있는 wppf 단추가 있습니다.단추 마우스 오버 사용 안 함

배경 위로 마우스를 가져 가면 버튼이 표시됩니다.

어떻게하면 마우스 효과를 사용 중지 할 수 있습니까?

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

시각 상태 관리자를 사용하는 것과 같은 소리가납니다. 관련 xaml을 모두 제공하십시오. – Aphelion

+0

이것을 시도하십시오; http://stackoverflow.com/questions/1302756/why-is-the-buttons-background-changing pro-tip, 평판이 없다면 "trival answer"를 게시하고 어떤 일이 벌어 지는지보십시오. –

답변

13

다음은 버튼에 시각적 마우스 오버 효과를 사용하지 않도록 설정 한 방법입니다. 나는 방아쇠 등을 가지고 노는 법을 느낄 수 있도록 실험실에서 자유롭게 기분을 느낄 수 있도록 일부 설정을 남겼습니다.

<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> 

편집 : FocusVisualStyle이 (처음 2 라인)를 null로 설정 +은 "BasedOn"을 사용하여 효과 위에 마우스를 제거한다. 다른 모든 것은 단지 예일뿐입니다. 방아쇠를 통해 게임을하기 위해 거기에 테두리를 추가했습니다. (사용자 정의 마우스 오버 효과가 필요하기 때문에).

+2

이 게시물에 동의하지 않습니다. 처음 두 줄은 제 응용 프로그램에서 제로 효과가있었습니다. 다른 곳에서는 템플릿을 부분적으로 덮어 쓸 수 없으며 템플릿을 완벽하게 완성해야만 사용할 수 있습니다. 불행히도, 아직 해결책을 찾지 못했지만이 게시물의 조언은 분명 나에게 도움이되지 못했습니다. – shawn1874

+1

@ shawn1874 - "다른 곳에서 읽었습니다"는 링크를 통해이 접근법의 잠재적 인 문제점을 설명 할 수 있습니다. "응용 프로그램"에 의해 변경되지 않은 빈 프로젝트에서 처음 두 줄 대신 전체 샘플을 시도해 보았지만 여전히 작동하지 않는지 확인하십시오. 7k 전망, 12 upvotes 및 단 하나 downvote로, 나는이 대답이 최대량을 만족 시킨다는 인상을 받고있다. – Joe

8

ButtonControlTemplate에서 Background 속성은 트리거에 의해 무시됩니다.
당신은 전체 ControlTemplate을 다시 실행하고, 배경의 변화를 생략하거나 이러한 모든 합병증을 방지하기 위해 다음처럼 Button의 내용으로 이미지를 추가 할 수 있습니다 :

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

아니면 거기에 텍스트를 필요로하는 경우뿐만 아니라를 :

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

Content = "Reset"이 (가) 있기 때문에 사용할 수 없습니다. –

+0

패널을 사용하여 이미지와 텍스트 블록을 "다시 설정"하여 복잡한 레이아웃을 여전히 수행 할 수 있습니다. – MrDosu

+1

매우 간단한 해결책을 가져 주셔서 감사합니다 –

관련 문제