Ale*_*lex 13 .net wpf xaml styles mouseevent
我有一个Grid与Border它周围.鼠标悬停在上面Grid,我想改变它的样式Border.我该怎么做呢?这是我尝试过的,到目前为止没有任何成功:
<Border Name="Border" BorderBrush="Transparent" BorderThickness="1" CornerRadius="2">
<Grid>
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="BorderBrush" Value="#FFB9D7FC" />
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
...
</Grid>
</Border>
Run Code Online (Sandbox Code Playgroud)
在尝试构建此XAML时,我收到错误
无法在样式设置器上设置TargetName属性.
但我想不出有任何其他办法可以做到这一点.非常感谢帮助.使用任何代码隐藏是不可能的.
Hei*_*nzi 14
您需要执行以下操作:
从Border定义中删除BorderBrush.触发器可以覆盖样式中的setter设置的属性,但不能覆盖标记中直接设置的属性.
将Trigger放入Border而不是Grid中(参见其他人提供的示例).
关于网格上的命中测试:在网格后面放置一个透明框,以便始终捕获MouseOver:
第3点的代码示例:
<Grid>
<Rectangle Fill="Transparent" /><!-- make sure that the mouse is always over "something" -->
<Grid Name="myGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Name="myText">sadasdsa</TextBlock>
</Grid>
</Grid>
Run Code Online (Sandbox Code Playgroud)
Roe*_*elF 10
直接在Border对象上设置触发器.另外,不要在Border对象上设置BorderBrush,还要使用触发器设置它:
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Border.BorderBrush" Value="Yellow" />
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Border.BorderBrush" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
Run Code Online (Sandbox Code Playgroud)
此外,如果您无法查看触发器的功能,请在此处查看如何调试触发器.可以非常有帮助.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
19106 次 |
| 最近记录: |