抱歉我的英语不好。
我是 WPF 新手,我有一个问题。
我想在触发 isMouseOver
时更改包含路径(图像)的 Canvas
的视觉样式。
步骤:
- 将 Canvas 放置到窗口
- 包含路径
结果:
<Canvas x:Name="mycanvas" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0">
<Path Width="40" Height="30" Canvas.Left="18" Canvas.Top="23" Stretch="Fill" Fill="#FF000000" Data="F1 M 18,23L 58,23L 58,53L 18,53L 18,23 Z M 54,31L 22,31L 22,49L 54,49L 54,31 Z M 45,38L 45,42L 31,42L 31,38L 45,38 Z "/>
</Canvas>
然后,我将 Canvas 与 Button
样式组合在一起,并在发生 isMouseOver
时用白色填充“Path”。
我的风格:
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Canvas x:Name="mycanvas" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0">
<Path x:Name="path" Width="40" Canvas.Top="23" Stretch="Fill" Canvas.Left="18" Height="30" Fill="#FF000000" Data="F1 M 18,23L 58,23L 58,53L 18,53L 18,23 Z M 54,31L 22,31L 22,49L 54,49L 54,31 Z M 45,38L 45,42L 31,42L 31,38L 45,38 Z "/>
</Canvas>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True" SourceName="mycanvas">
<Setter Property="Fill" TargetName="path" Value="White"/>
</Trigger>
<Trigger Property="IsPressed" Value="True"/>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但是 IsMouseOver
仅当鼠标穿过图像(“路径”)表面时才起作用。
但图像表面较小且包含断点。
我该如何解决这个问题?
最佳答案
在Canvas
背景
中放置一个SolidColorBrush
和Transparent
>颜色:
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Canvas x:Name="mycanvas" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0">
<Canvas.Background>
<SolidColorBrush Color="Transparent"/>
</Canvas.Background>
<Path x:Name="path" Width="40" Canvas.Top="23" Stretch="Fill" Canvas.Left="18" Height="30" Fill="#FF000000" Data="F1 M 18,23L 58,23L 58,53L 18,53L 18,23 Z M 54,31L 22,31L 22,49L 54,49L 54,31 Z M 45,38L 45,42L 31,42L 31,38L 45,38 Z "/>
</Canvas>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" SourceName="mycanvas">
<Setter Property="Fill" TargetName="path" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
关于c# - isMouseOver 在带有路径的 Canvas 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531751/