更改鼠标上的周围边框样式

Ale*_*lex 13 .net wpf xaml styles mouseevent

我有一个GridBorder它周围.鼠标悬停在上面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

您需要执行以下操作:

  1. 从Border定义中删除BorderBrush.触发器可以覆盖样式中的setter设置的属性,但不能覆盖标记中直接设置的属性.

  2. 将Trigger放入Border而不是Grid中(参见其他人提供的示例).

  3. 关于网格上的命中测试:在网格后面放置一个透明框,以便始终捕获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)

此外,如果您无法查看触发器的功能,请在此处查看如何调试触发器.可以非常有帮助.
希望这可以帮助.