2009-10-28 3 views
1

텍스트 콘텐츠를 흰색에서 검은 색으로 변경하는 마우스 오버 스타일을 지정하는 표준 내 응용 프로그램에 ButtonStyle이 적용되어 있습니다. 이것을 달성하기 위해 버튼 템플릿을 수정하고 ContentPresenter을 제거하고 TextBlock으로 바꾸어 보았습니다.혼합 된 내용의 WPF 버튼에 마우스 오버 스타일 사용

<Button 
    <Button.Content> 
     <StackPanel Orientation="Horizontal"> 
      <Path Margin="3" Width="12.375" Height="9.70833" Canvas.Left="0" Canvas.Top="0" 
        Stretch="Fill" Fill="#FF115485" 
        Data="F1 M 18.8333,7.08333L 16.7083,4.91667L 10.5,10.5417L 8.52083,8.6875L 6.45833,10.4792L 10.4792,14.625L 18.8333,7.08333 Z "/> 
      <TextBlock Margin="3">Hello</TextBlock> 
     </StackPanel> 
    </Button.Content> 
</Button> 

상황을 개선하기 위해, 나는 그때의 ContentPresenter을 넣어 버튼이 같은 ContentTemplate 지정 제 (전용 텍스트)에 : 그러나,이 내가 같은 혼합 콘텐츠를 할 수 없음을 의미

<Button IsDefault="True" Content="Text only Button" 
     ContentTemplate="{StaticResource TextButtonTemplate}" 
     Command="{Binding ...}" 
     CommandParameter="{...}" /> 

그리고 Template은 다음과 같이 정의됩니다. 이 템플릿은 텍스트 콘텐츠가 포함 된 Button에 대해서만 작동하며 혼합 콘텐츠에 필요한 다른 템플릿으로 정의됩니다.

<DataTemplate x:Key="TextButtonTemplate"> 
    <TextBlock Text="{TemplateBinding Content}" 
       Foreground="{Binding Path=Foreground,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Button}}" /> 
</DataTemplate> 
내가 원하는 마우스 오버 스타일을 유지하여이를 더욱 향상시킬 수있는 방법은 사용자 정의 템플릿을 정의하지 않고있는 경우

사람이 알고 있나요? 명시 적으로 자신의 모든 색상을 설정하지 않는 내용을 가정

답변

1

, 당신과 같이이 작업을 수행 할 수 있습니다

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="TextBlock.Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

TextBlock.Foreground가 상속 재산이기 때문에이 작동합니다. Button의 내용에있는 컨트롤이 명시 적으로 자신의 전경을 설정하지 않으면이 작업이 가능합니다. 그들이 자신의 색상을 설정하면 모든 내기가 꺼져 있습니다.

+0

대단한 답변을 보내 주셔서 감사합니다. 전에 상속 된 속성으로는 아무 것도하지 않았습니다. 불행히도, 내 TextBlocks는 시스템 자체를 사용하지 않기 때문에 자신의 색상을 설정합니다. 그 중 하나에 새로운 질문을 게시해야 할 수도 있습니다 ..... –

+0

나를 위해 작동하지 않습니다. – flq