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>
我在 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>