2017-01-01 5 views
1

자원 WPF :변경 색상 -

<Window.Resources> 
    <Style x:Key="blue"> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="Border.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard TargetProperty="(Border.Background).(SolidColorBrush.Color)"> 
         <ColorAnimation To="#ffffff" Duration="0:0:.3"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 


      <EventTrigger RoutedEvent="Border.MouseLeave"> 
       <BeginStoryboard> 
        <Storyboard TargetProperty="(Border.Background).(SolidColorBrush.Color)"> 
         <ColorAnimation To="#FF0080FF" Duration="0:0:.3"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

보기 :

<Border Style="{StaticResource blue}" Cursor="Hand" BorderBrush="#FF0080FF" BorderThickness="1" HorizontalAlignment="Left" Height="43" Margin="85,266,0,0" VerticalAlignment="Top" Width="157" CornerRadius="30" Panel.ZIndex="10" Background="#FF0080FF"> 
     <TextBlock x:Name="textBlock" TextWrapping="Wrap" TextAlignment="Center" FontSize="28" Foreground="White" Margin="0,5,0,4"><Run FlowDirection="RightToLeft" Text="hello"/></TextBlock> 
    </Border> 

마우스가 Border를 가져 가면의 Border.Background 흰색을 변경하지만 TextBlock.Foreground 색상도 흰색입니다.

어떻게 동시에 변경할 수 있습니까?

+0

윌 버튼으로,이 Border/TextBlock에 사용할 수 있습니까? – GeorgeChond

+0

_____yes_______ – amirhossein

답변

0

BorderTextBlock거야 버튼으로 사용할 수있다. 그 목적을 위해

대신이 유사한 Border에 대한 Styles과는 Button 컨트롤을 사용하고 필요에 따라 테두리와 텍스트를 변경하기 위해 StyleTemplate 속성의 수정 바람직하다 TextBlock을 만드는.

자료 :

 <Style x:Key="FocusVisual"> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> 
     <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/> 

     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
     <Setter Property="Padding" Value="1"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border x:Name="border" Cursor="Hand" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" BorderBrush="#FF0080FF" BorderThickness="1" HorizontalAlignment="Left" VerticalAlignment="Top" CornerRadius="30" Panel.ZIndex="10" Background="#FF0080FF"> 
         <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Border> 
        <ControlTemplate.Triggers> 


         <EventTrigger SourceName="border" RoutedEvent="MouseEnter"> 
          <BeginStoryboard> 
           <Storyboard TargetName="border" TargetProperty="(Background).(SolidColorBrush.Color)"> 
            <ColorAnimation To="#ffffff" Duration="0:0:.3"/> 
           </Storyboard> 

          </BeginStoryboard> 
          <BeginStoryboard> 
           <Storyboard TargetProperty="Foreground.(SolidColorBrush.Color)"> 
            <ColorAnimation To="#FF0080FF" Duration="0:0:.3"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger> 
         <EventTrigger SourceName="border" RoutedEvent="MouseLeave"> 
          <BeginStoryboard> 
           <Storyboard TargetName="border" TargetProperty="(Background).(SolidColorBrush.Color)"> 
            <ColorAnimation To="#FF0080FF" Duration="0:0:.3"/> 
           </Storyboard> 
          </BeginStoryboard> 
          <BeginStoryboard> 
           <Storyboard TargetProperty="Foreground.(SolidColorBrush.Color)"> 
            <ColorAnimation To="#ffffff" Duration="0:0:.3"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

버튼 :

 <Button Foreground="White" FontSize="28" Width="157" Height="43" Content="hello" Style="{DynamicResource ButtonStyle1}"></Button> 
+0

와우! 대단히 감사합니다 !!! – amirhossein

0

스타일은 적용되는 요소의 속성 만 설정할 수 있습니다. 즉, 테두리 스타일로 TextBlock의 Foreground 속성을 설정할 수 없습니다.

당신은 비록 TextBlock의 또 다른 스타일을 정의 할 수 있습니다 : 의견에 명시된 바와 같이

<Border x:Name="border" Style="{StaticResource blue}" Cursor="Hand" BorderBrush="#FF0080FF" BorderThickness="1" HorizontalAlignment="Left" Height="43" Margin="85,266,0,0" VerticalAlignment="Top" Width="157" CornerRadius="30" Panel.ZIndex="10" Background="#FF0080FF"> 
    <TextBlock x:Name="textBlock" TextWrapping="Wrap" TextAlignment="Center" FontSize="28" Margin="0,5,0,4"><Run FlowDirection="RightToLeft" Text="hello"/> 
     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Setter Property="Foreground" Value="White" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsMouseOver, ElementName=border}" Value="True"> 
         <DataTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"> 
            <ColorAnimation To="#FF0080FF" Duration="0:0:.3"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.EnterActions> 
         <DataTrigger.ExitActions> 
          <BeginStoryboard> 
           <Storyboard TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"> 
            <ColorAnimation To="#FFFFFF" Duration="0:0:.3"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.ExitActions> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</Border> 
+0

고맙습니다. – amirhossein