2012-03-16 8 views
0

나는 visibility = hidden 인 직사각형을 가진 스타일을 가지고 있습니다.EventTrigger의 가시성 변경

마우스가 사각형을 입력 할 때 가시성을 변경하고 싶습니다.

사각형에 'IsMouseOver'속성이 없으므로 트리거를 사용할 수 없습니다.

어떻게 할 수 있습니까? (애니메이션으로 속성을 변경하는 방법)

감사합니다.

+0

실제로는 http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle.aspx에서 읽을 수있는 한 사각형에는 IsMouseOver 속성이 있습니다. – Klaus78

답변

0

댓글을 쓰려면 버튼을 찾고 있지만 찾지 못했습니다. 그래서 여기에 답이옵니다.

두 가지 :이 숨겨진 경우

어떻게 가능, 가시에 요소의 Visisbility을 설정해야합니까? MouseEnter 및 MouseLeave 이벤트는 호출되지 않습니다. 따라서 IsMouseOver 속성은 항상 False입니다.

두 번째 것은 IsMouseOver 속성이 트리거에서 작동하지 않는다는 것입니다. (또한 시도해 보았습니다. 예외가 있습니다.)

또 다른 방법은 MouseEnter 및 MouseLeave에서 EventTriggers를 사용하는 것입니다.

KR SB 가시성이 세 가지 열거, 가시 숨겨진 및 축소했다

0
<Rectangle Width="400" Height="400" Fill="Red" Opacity="0"> 
     <Rectangle.Style> 
      <Style TargetType="Rectangle"> 
       <Style.Triggers> 
        <EventTrigger RoutedEvent="MouseEnter"> 
         <BeginStoryboard> 
          <Storyboard TargetProperty="Opacity"> 
           <DoubleAnimation From="0" To="1" Duration="0:0:2" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger> 
        <EventTrigger RoutedEvent="MouseLeave"> 
         <BeginStoryboard> 
          <Storyboard TargetProperty="Opacity"> 
           <DoubleAnimation From="1" To="0" Duration="0:0:2" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger> 
       </Style.Triggers> 
      </Style> 
     </Rectangle.Style> 
    </Rectangle> 
-1

따라서 당신은 직접 Visibility 속성이 아닌 모든 재산 부울 속성에 또는 그 문제에 대한 바인딩 캔트. WPF Visibility Converter에서 작성하거나 변환기를 검색 할 수 있습니다. 또는 이것을 시도 할 수 있습니다 :

태그 속성을 사용하여 visibility 속성에 바인딩하면 정상적으로 작동하고 간단하며 스타일 작성기 및 트리거에 완전히 포함됩니다. 물론 당신이 뭔가 다른 태그를 사용하는 경우. 음.

이 경우에는 두 개의 TextBlock이 있습니다. 마우스가 다른 텍스트 블록을 입력하면 하나의 텍스트 블록이 보이기를 원합니다. 태그 속성을 Visible로 설정하고 두 번째 텍스트 상자 Visibility 속성을 firsts 태그 속성에 바인딩합니다.

<HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
        <StackPanel Orientation="Horizontal "> 
         <TextBlock Name="TextBlockTitle" Text="{Binding Title}"> 
          <TextBlock.Style> 
           <Style TargetType="{x:Type TextBlock }"> 
            <Style.Triggers> 
             <Trigger Property="IsMouseOver" Value="True"> 
              <Setter Property="Tag" Value="Visible"/> 
             </Trigger> 
             <Trigger Property="IsMouseOver" Value="False"> 
              <Setter Property="Tag" Value="Hidden"/> 
             </Trigger> 
            </Style.Triggers> 
           </Style> 
          </TextBlock.Style></TextBlock> 
         <TextBlock Name="TextBlockAdd" Text=" + Add New" MouseLeftButtonDown="TextBlockAdd_OnMouseLeftButtonDown"> 
          <TextBlock.Style> 
           <Style TargetType="{x:Type TextBlock }"> 
            <Setter Property="Visibility" Value="{Binding ElementName=TextBlockTitle,Path=Tag}"></Setter> 
            <Style.Triggers> 
             <Trigger Property="IsMouseOver" Value="True"> 
              <Setter Property="Visibility" Value="Visible"/> 
             </Trigger> 
             <EventTrigger RoutedEvent="MouseLeftButtonDown" ></EventTrigger> 
            </Style.Triggers> 
           </Style> 
          </TextBlock.Style> 
         </TextBlock> 
        </StackPanel> 

       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
0

좋아, 요약 및 다른 사람이 쓴에 추가 :

사각형을 IsMouseOver 속성을 가지고있다. 따라서이 속성을 사용할 수있는 트리거 (스타일 내부)를 만들 수 있습니다. 그러나 이것은 작동하지 않습니다. 왜? WPF와 관련하여 요소가 보이지 않으면 마우스가 결코 넘어지지 않습니다. 즉, 요소가 숨겨져 있으며 IsMouseOver은 항상 false입니다. 따라서 사용자가 마우스를 놓아야하는 위치에 마우스를 올려 놓았을 때 요소를 보이게 할 수는 없습니다.

직사각형을 사용하는 경우 다른 방법이 있습니다. 보이지 않게하는 대신 사각형의 색을 투명하게 변경할 수 있습니다. , 사용이되는 질문 아무튼 정확히 당신이 원하는에 따라 달라집니다 물론

<Rectangle Width="200" Height="200"> 
    <Rectangle.Style> 
     <Style TargetType="Rectangle"> 
      <Setter Property="Fill" Value="Transparent"></Setter> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Fill" Value="Yellow"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Rectangle.Style> 
</Rectangle> 

: 그것은해야하고 (예를 들어) 다음 코드는 당신이 원하는 것을 할 것 같은 그런 식으로, 그것은 IsMouseOver 작동합니다 언급하지 마라.또 다른 방법은 숨기거나 보여줄 필요가있는 차원과 위치가 같은 다른 Rectangle을 만드는 것입니다. 이 새 Rectangle은 투명하지만 항상 표시됩니다. 그런 다음 Rectangle의 Visibility을이 새로운 Rectangle의 IsMouseOver에 바인딩 할 수 있습니다.

관련 문제