我要做的事情当鼠标悬停在网格边框 Visibilty 属性值时必须更改。
我有一个带有3个ColumnDefinition的网格。
代码是
<Grid x:Name="grid1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="27*"/>
<ColumnDefinition Width="93*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="Blue" Visibility="Hidden">
<Border.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver , RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}" Value="True">
<Setter Property="Border.Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<Image Grid.Column="1" />
<TextBlock Grid.Column="2" />
</Grid>
当鼠标悬停在网格上时,没有任何事情发生。所以这个代码不起作用
答案 0 :(得分:2)
有一点是,当需要MouseOver时,不应在DataTrigger中使用IsReadOnly
属性。
另一个是本地值Visibility="Hidden"
的优先级高于DataTrigger setter <Setter Property="Border.Visibility" Value="Visible" />
,即使条件为真也不会更改
两者的修复(Visibility
的初始值在setter中定义)
<Border Grid.Column="0" Background="Blue">
<Border.Style>
<Style>
<Setter Property="Border.Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}" Value="False">
<Setter Property="Border.Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
您还应将网格背景设置为非空值(例如<Grid x:Name="grid1" Background="Transparent">
),以便在网格中注册鼠标移动({x:Null} vs. Transparent?)