2012-03-16 12 views
0

私はvisibility = hiddenの四角形を持つスタイルを持っています。EventTriggerの可視性を変更する

マウスが長方形に入ると視認性を変更する必要があります。

矩形は 'IsMouseOver'プロパティを持たないため、トリガを使用できません。

どうすればいいですか? (どのようにアニメーションでプロパティを変更することができます)

ありがとう。

+0

実際に私がhttp://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle.aspxから読むことができる限り、RectangleにはプロパティIsMouseOver – Klaus78

答えて

0

私はコメントを書くためのボタンを探していますが、私はそれを見つけませんでした。 ここに答えが来る。

2つのこと:

方法は、それが隠されている場合は、可視に要素のVisisbilityを設定することが可能にすべきか? MouseEnterイベントとMouseLeaveイベントは呼び出されません。 IsMouseOverプロパティは常にFalseです。

2番目のことは、IsMouseOverプロパティがトリガーで機能しないことです(私も試してみましたが....例外があります)。

別の方法として、MouseEnterおよびMouseLeaveでEventTriggersを使用する方法があります。

KR SB可視性が3つの列挙、可視隠され、崩壊した

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プロパティにバインドしても問題ありません。これは簡単で、スタイル設定とトリガーに完全に対応しています。もちろん、あなたが、私は2羽のTextBlockを持っている。この場合、まあ...

何か他のもののためにあなたのタグを使用している場合、私は1つのTextBlockを可視たいマウスは、他に入り、そこで、マウスが最初の上にあるとき、私はそのを変更するときタグプロパティをVisibleにバインドし、2番目のテキストボックス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

まとめると、他の人が書いたものに追加するには、[OK]:

矩形がIsMouseOverプロパティを持っています。したがって、このプロパティで動作するトリガー(スタイル内)を作成することは可能です。ただし、これは機能しません。どうして? WPFに関する限り、要素が表示されていなければ、マウスは決して上にありません。言い換えれば、要素が隠されている、IsMouseOverは常に偽になります。したがって、ユーザーがマウスを置くべき場所にマウスを置いたときに要素を表示させるために使用することはできません。

矩形で作業している場合、別の方法があります。表示されないようにする代わりに、矩形の色を透明に変更できます。 、使用量は、どのあなたの質問doesnの正確あなたが何をしたいかに依存します。もちろん、

<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のVisibilityをこの新しいRectangleのIsMouseOverにバインドすることができます。

関連する問題