WPF:以资源样式设置鼠标悬停边框

WPF: Setting border on mouseover in a resource style

我在 App.xaml

中有此样式作为资源
<Style x:Key="StackPanelLink" TargetType="{x:Type StackPanel}">
    <Setter Property="Width" Value="500" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" Value="GhostWhite" />
            <Setter Property="Border.BorderBrush" Value="LightBlue" />
            <Setter Property="Border.BorderThickness" Value="10" />
        </Trigger>
    </Style.Triggers>
</Style>

改变背景的触发器有效,但改变边框的触发器无效。我在网上看到的所有示例都在 StackPanel 中使用了 Border 元素,但我不明白如何将其应用于资源文件中的样式。

Rant:到目前为止我真的很讨厌 WPF。这是我用过的最不容易发现、最不直观的技术。我尝试做的每一件琐碎的事情都是一个小时的谷歌搜索和一些涉及 30 行 XML.

的解决方案

The background-changing trigger works but the border-changing one does not.

那是因为 StackPanel 上不存在这些属性。 StackPanel 没有边框。它只是一个 Panel 将子元素排列成一行,可以水平或垂直定向。

听起来您想使用 Border 元素和样式:

<Style x:Key="StackPanelLink" TargetType="{x:Type Border}">
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Width" Value="500" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" Value="GhostWhite" />
            <Setter Property="Border.BorderBrush" Value="LightBlue" />
            <Setter Property="Border.BorderThickness" Value="10" />
        </Trigger>
    </Style.Triggers>
</Style>
...
<Border Style="{StaticResource StackPanelLink}">
    <TextBlock>....</TextBlock>
</Border>