IsMouseOver上的触发器需要大的StrokeThickness

时间:2011-04-14 20:54:55

标签: wpf

我将以下控件设置为WinForms元素主机的子级(WPF Interop)。当StrokeThickness设置为低值(即1)时,IsMouseOver属性似乎不一致,并且不会出现正确的样式。我确认问题不在于WinForms,因为我还测试了WPF应用程序中的功能。这引起了我的问题,因为我在自定义图表控件上使用这些矩形作为隐藏叠加层。当鼠标进入图表的某个区域时,它会突出显示。使用IsMouseOver属性时是否存在其他属性约束(即StrokeThickness)?

    <UserControl.Resources>
    <Style x:Key="myStyle" TargetType="{x:Type Rectangle}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
                <Setter Property="Fill" Value="Gold"/>
            </Trigger>
        </Style.Triggers>
        <Setter Property="Width" Value="100"/>
        <Setter Property="Height" Value="Auto"/>
        <Setter Property="Stroke" Value="Black"/>
        <Setter Property="StrokeThickness" Value="10"/>
        <Setter Property="VerticalAlignment" Value="Stretch"/>
        <Setter Property="HorizontalAlignment" Value="Stretch"/>
    </Style>
</UserControl.Resources>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="Auto" Width="Auto">
    <StackPanel Orientation="Horizontal">
        <Rectangle Style="{StaticResource myStyle}"/>
        <Rectangle Style="{StaticResource myStyle}"/>
        <Rectangle Style="{StaticResource myStyle}"/>
        <Rectangle Style="{StaticResource myStyle}"/>
        <Rectangle Style="{StaticResource myStyle}"/>
    </StackPanel>
</Grid>

2 个答案:

答案 0 :(得分:1)

那是因为你没有为矩形设置背景(Fill)。因此,只有在笔划超过笔划时才会考虑鼠标。将Fill设置为null以外的其他内容,即使它是Transparent

答案 1 :(得分:0)

尝试将SnapsToDevicePixels设为true。问题可能是您的笔划仅渲染为“半”像素,因此鼠标事件无法按预期工作。

编辑:或者,您可能希望明确将矩形背景设置为transparent,而不是鼠标背景。