我的样式有可见性=隐藏的矩形。
我想在鼠标输入矩形时更改可见性。
因为矩形没有'IsMouseOver'属性我不能使用触发器。
我怎么能这样做? (如何用动画改变属性)
感谢。
答案 0 :(得分:0)
我正在寻找一个写评论的按钮,但我没有找到它。 所以这里有一个答案。
两件事:
如果元素的Visisbility被隐藏,怎么可能将它的Visisbility设置为Visible?不会调用MouseEnter和MouseLeave事件。因此,IsMouseOver属性始终为False。
第二件事是,我想知道IsMouseOver属性不能在触发器中工作(我也尝试过它......并且有例外)。
另一种方法是在MouseEnter和MouseLeave上使用EventTriggers。
KR SB
答案 1 :(得分: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>
答案 2 :(得分:0)
好的,总结并添加其他人写的内容:
矩形确实具有IsMouseOver属性。因此,可以创建一个可以使用此属性的触发器(在样式内)。但是,这不起作用。为什么?因为就WPF而言,如果元素不可见,则鼠标永远不会超过它。换句话说,如果元素被隐藏,IsMouseOver
将始终为false。因此,当用户将鼠标放在应该放置的位置时,您无法使用它来显示元素。
如果您正在使用矩形,则还有另一种方法:您可以将矩形的颜色更改为透明,而不是使其不可见。这样,它IsMouseOver
将按预期工作,以下代码(作为示例)将执行您想要的操作:
<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>
当然,用法取决于你想要做什么,你的问题没有提到。另一种方法可能是创建另一个Rectangle,其尺寸和位置与您需要隐藏/显示的相同。这个新的Rectangle是透明的,但总是可见的。然后,您可以将Rectangle的Visibility
绑定到这个新的Rectangle IsMouseOver
。
答案 3 :(得分:-1)
可见性有三个枚举,Visible Hidden和Collapsed,因此您无法直接绑定到bool属性或任何不属于Visibility属性的属性。您可以编写或查找转换器,在WPF可见性转换器上搜索。或者你可以试试这个:
使用tag属性并将其绑定到visibility属性,它工作正常,很简单,完全在你的样式设置器和触发器中。当然,如果你使用你的标签做其他事情哦..
在这种情况下我有两个TextBlocks,我想在鼠标进入另一个时看到一个文本块,所以当鼠标在第一个上面时,我将其tag属性更改为Visible并将第二个文本框Visibility属性绑定到第一个标签属性。
<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>