2011-08-02 3 views
0

토글 버튼을 눌렀을 때 색상이 변경되도록 스타일을 지정하고 다시 누를 때까지 색상을 유지하려고합니다. 현재 마우스 오버는 버튼을 누른 후 마우스가 토글 버튼을 벗어나면 색상을 다시 변경합니다. 마우스 오버 색상 변경을 취소하고 Checked 상태에서 색상을 설정할 수있게했지만 마우스 오버 효과를 잃고 싶지 않습니다. 둘 다 가질 수있는 방법이 있습니까? 나 자신의 확장기를 만들었습니다. 컨트롤을 만드는 것에 대해 가르쳐 줬지만, mouseover와 눌려진 색을 모두 가지는 방법을 알아 내지 못합니다.이 예제에서는 mouseover가 버튼을 클릭/체크하지 않은 경우에만 재설정해야합니다. 이 ToggleButton 스타일을 사용하고 있습니다. http://msdn.microsoft.com/en-us/library/cc296245(v=vs.95).aspxToggleButton MouseOver 선택된 질문을 확인했습니다.

+0

실제로 원하는 효과를 설명 할 수 있습니까? 기본 템플리트는 그라디언트의 방향을 사용하여 선택된 상태를 피드백합니다. 단추를 모두 선택하고 마우스가 위에있을 때 원하는 모양을 사용하지 않으십니까? – AnthonyWJones

+1

이 질문과 같은 문제가 발생했습니다. http://stackoverflow.com/questions/3596026/custom-styled-listbox-how-can-i-keep-the-style-for-a-selected-item/ 3596570 # 3596570 – Denis

답변

2

This MSDN Link 하십시오의 ControlTemplate에서 VisualStateGroup에

의 ControlTemplate 작성자 VisualState 오브젝트 제어의 시각적 동작을 지정한다. 같은 VisualStateGroup에 서로 배타적 인 상태를 놓습니다. 예를 들어 CheckBox에는 두 개의 VisualStateGroup 객체가 있습니다. 하나는 Normal, MouseOver, Pressed 및 Disabled 상태를 포함합니다. 다른 하나는 State, Checked, UnChecked 및 Indeterminate를 포함합니다. CheckBox는 MouseOver 및 UnChecked 상태 일 수 있지만 동시에 MouseOver 및 Pressed 상태 일 수는 없습니다.

실버 라이트는 상당히 익숙하지 만 테두리 또는 사각형과 같은 두 번째 컨트롤을 사용해야 할 수도 있지만이 옵션이 맞는지는 확실하지 않지만 테두리 브러시를 변경하도록 설정할 수도 있습니다 마우스 위에 색상.

1

트리거 순서는 중요합니다. 이 스타일은 지정한대로 작동합니다. 상기 설명 부분 주장하에

<Style x:Key="{x:Type ToggleButton}" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Foreground" Value="White" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Border Name="Border" BorderThickness="1" Background="Gray" BorderBrush="Gray"> 
        <ContentPresenter Name="ContentHost" Margin="8,3" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="true" /> 
       </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="true"> 
          <Setter TargetName="Border" Property="Background" Value="Yellow" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="Yellow" /> 
         </Trigger> 
         <Trigger Property="IsChecked" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="Red" /> 
          <Setter TargetName="Border" Property="BorderBrush" Value="Red" /> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="Green" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="Green" /> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter TargetName="Border" Property="Opacity" Value="0.25" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

이것은 SilverLight에서도 가능합니까? 아니면 그냥 WPF? – Terco

+0

@Wallstreet 트리거의 순서가 어떤 방식으로 중요하게 확장되었는지 알고 싶습니다. – StephenT

+0

@Bob : 아니요.이 질문은 순전히 WPF 답변이며, Silverlight에서는 작동하지 않습니다. – AnthonyWJones

관련 문제