Вы можете сделать это, разместив стиль на границе и используя Trigger .
Обратите внимание, что вам нужно установить нормальный цвет в стиле, поскольку установка его непосредственно на границе будет устанавливать локальное значение, которое переопределяет триггер.
<Border x:Name="LayoutRoot" BorderThickness="5">
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="Transparent"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid>...Content here...</Grid>
</Border>
Вы также можете поместить стиль в словарь ресурсов, чтобы вы могли поделиться им между несколькими элементами границы:
<UserControl.Resources>
<Style TargetType="Border" x:Key="borderGreenOnHover">
<Setter Property="BorderBrush" Value="Transparent"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Border x:Name="LayoutRoot" BorderThickness="5"
Style="{StaticResource borderGreenOnHover}">
<Grid>...Content here...</Grid>
</Border>
Если мышь находится внутри границы,курок не сработает.Это связано с тем, что по умолчанию фон для границы имеет значение null, а не прозрачный, поэтому область фона не будет реагировать на тестирование попадания .Если вы установите для свойства Border.Background значение «Прозрачный» или другой объект «Кисть», триггер сработает, если мышь находится где-нибудь над границей.
Если вам нужен ненулевой фон для границы, но вы хотите, чтобы триггер срабатывал только тогда, когда мышь находится над границей, вы можете использовать IsMouseDirectlyOver вместо IsMouseOver, что будетбыть ложным, если мышь находится над дочерним элементом.Затем вы можете установить для фона на сетке значение «Прозрачный», чтобы мышь всегда находилась над сеткой.(Действительно, если бы вы хотели, чтобы содержимое имело цвет фона, было бы проще просто установить его в сетке.)