2012-08-10 2 views
1

Button의 배경과 그 색상이 TextBlock 인 템플릿을 변경하려고합니다. 내 템플릿에서 다음 XAML을 시도했지만 마우스 오버시 버튼이 사라집니다. 트리거에서 버튼 내용의 속성을 변경하는 방법이 있습니까?트리거시 XAML의 버튼 내용을 변경하십시오.

   <ControlTemplate TargetType="{x:Type Button}"> 
       <Border 
         x:Name="Border" 
         CornerRadius="0" 
         BorderThickness="0" 
         Background="{x:Null}" 
         BorderBrush="#FF404040" /> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="true"> 
          <Setter TargetName="Border" Property="Background" Value="White" /> 
          <Setter Property="ContentTemplate"> 
           <Setter.Value> 
            <DataTemplate DataType="TextBlock"> 
             <TextBlock Foreground="Blue" /> 
            </DataTemplate> 
           </Setter.Value> 
          </Setter> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

답변

2

스타일 :

<Style TargetType="{x:Type Button}" x:Key="MyButton"> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="Border" 
         CornerRadius="0" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Background="{TemplateBinding Background}" 
         TextBlock.Foreground="{TemplateBinding Foreground}" 
         BorderBrush="#FF404040"> 
        <ContentPresenter Margin="2" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center" 
             RecognizesAccessKey="True" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="White" /> 
         <Setter TargetName="Border" Property="TextBlock.Foreground" Value="Blue" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

사용법 :

<Button Width="100" Height="50" Content="Lalala" Style="{StaticResource MyButton}" Background="Brown" Foreground="Green" BorderThickness="2"></Button> 
  1. 당신은의 Content 속성을 시각화에 대한 책임 ContentPresenter,이 누락 Button.
  2. 전경을 설정하려면 TextBlock.Foreground 속성을 사용할 수 있습니다.
  3. Control Styles and Templates은 항상 나에게 매우 유용하고있다 :
+0

감사합니다! 정확히 무엇이 필요합니까 =) – Parker

+0

사이드 질문, 내 Button의 내용이 TextBlock이 포함 된 StackPanel이라면 TextBlock.Foreground 대신 StackPanel.TextBlock.Foreground를 사용합니까? – Parker

+1

불행히도'TextBlock.Foreground'는 더 복잡한 시나리오에서는 작동하지 않습니다 (단지 기본값). 'StackPanel.TextBlock.Foreground'도 작동하지 않습니다. 좀 더 복잡한 내용을 가지고있을 때는 스타일을 템플릿이 아닌 컨텍스트 자체에서 수행해야한다고 생각합니다. – ShadeOfGrey

관련 문제