如何在IsMouseOver触发器上更改UserControl的子元素的属性?

时间:2016-01-31 03:24:42

标签: c# .net wpf xaml

我有一个自定义的usercontrol,它有一个轮廓边框,当鼠标悬停在控件上时我想以某种方式突出显示。 我试图向用户控件添加一个带鼠标触发器的样式但是没有找到如何定位子边框(样式targetname似乎找不到“OuterBorder”)。

将触发器添加到边框本身似乎根本不起作用。

<UserControl x:Class="CCC.Controls.Test"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:CCC.Controls"
             mc:Ignorable="d" 
             d:DesignHeight="240" d:DesignWidth="182" Height="240" Width="182" Margin="2" >
    <!-- tried to add trigger here too as UserControl.Style -->
    <Grid>
        ... <!-- other controls inside here -->
        <Border x:Name="OuterBorder" Width="182" CornerRadius="3"  BorderThickness="3" BorderBrush="#acacac" Margin="0,00,0,0" Height="240" VerticalAlignment="Top">
            <!-- doesnt work -->
            <Border.Style>
                <Style>
                    <Style.Triggers>
                        <Trigger Property="Border.IsMouseOver" Value="True">
                            <Setter Property="Border.BorderBrush" Value="Red"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
    </Grid>
</UserControl>

感谢您的任何想法!

1 个答案:

答案 0 :(得分:1)

您已将Local Value BorderBrush属性设为acacac。该本地值将优先。请参阅Property Value Precedence

  1. Background=Transparent设置Border

  2. BorderBrush代码中移除Border并进行以下更改:

    <Style.Triggers>
     <Trigger Property="IsMouseOver" Value="True">
          <Setter Property="BorderBrush" Value="Red"/>
     </Trigger>
     <Trigger Property="IsMouseOver" Value="False">
          <Setter Property="BorderBrush" Value="#acacac"/>
     </Trigger>
    </Style.Triggers>