WPF 中的鼠标悬停让我抓狂
Mouseover in WPF is driving me Nuts
我正在努力学习 WPF,所以请不要因为我问的是一个非常愚蠢的问题而责备我,但我已经花了几天时间在网上搜索答案,但似乎没有什么可以解决我的问题。
基本上,我想要做的就是了解我的各种测试应用程序控件的样式,以掌握最有效的方法以及如何使用它们。我在 'Page.Resources'.
中指定了一个名为“更简单”的样式
背景样式的第一部分确实可以正常工作,并且我的按钮具有预期的渐变填充,但是,尽管我在几天的反复试验中尽了最大努力(主要是错误),但我仍然无法获得 'IsMouseOver' 触发做任何事情。事实上,几乎任何其他需要调用触发器的“事件”都完全拒绝做任何事情。
WPF 似乎完全忽略了我样式的整个“”部分?
我真的很感激有人用简单的语言向我解释为什么会发生这种情况,或者更确切地说,为什么没有发生这种情况,以及我如何才能让它发挥作用?
提前致谢。
'''
Title="Page1">
<Page.Resources>
<Style x:Key="mouseover"
TargetType="Grid">
<Setter Property="Background" Value="Red"/>
</Style>
<Style x:Key="simpler" TargetType="Button">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Red" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" >
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Green" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Page.Resources>
<!--xmlns:Models="clr-namespace:WpfUI.Models"-->
<Grid>
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="Yellow" Offset="0.972"/>
</LinearGradientBrush>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<WrapPanel Grid.Row="0" Grid.Column="1"
Grid.ColumnSpan="3"
Grid.RowSpan="1" Height="60">
<!--Button ONE-->
<Button
x:Name="btn1"
Height="50" Width="135"
Margin="5"
Click="Page1_Click"
Foreground="White"
Content="ewttwttrt"
Style="{StaticResource simpler}">
<!-- We put our "text" into a Stackpanel (or any similar control)
so that we can use the defined Template above, whch stops our
text from being rendered -->
<!--<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"
VerticalAlignment="Center">
<TextBlock FontFamily="Wingdings" FontSize="16" Text="ü"/>
<TextBlock Text="btn1-MyButtonTemplate"/>
</StackPanel>-->
</Button>
'''
我不确定 SO 是否真的适合初学者。
稍后。
你可能会发现这很有趣:
https://social.technet.microsoft.com/wiki/contents/articles/32610.wpf-layout-lab.aspx
首先。
创建一个新的 wpf 应用程序。
在 mainwindow 内的网格中放置一个按钮。
它会填满你的网格,但别担心。
旋转它。
鼠标移到。
看到它变成浅蓝色了吗?
这样做的不是背景。
这是背景之上的东西。
尝试将其粘贴到开始 window 标签下方的所有内容中。
<Window.Resources>
<Style x:Key="simpler" TargetType="Button">
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Red" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}">
<ContentPresenter Margin="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
RecognizesAccessKey="True" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" >
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Green" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Width="1155" Height="805">
<Button Style="{StaticResource simpler}">
Banana
</Button>
</Grid>
</Window>
很抱歉,但为了避免浪费您宝贵的时间,我刚刚发现了 PreviewMouseDown 属性,它让我解决了上面针对不支持 Click 的任何控件所描述的问题事件,所以没必要浪费时间回答这个问题,当然,除非你有更好的解决方案??
我正在努力学习 WPF,所以请不要因为我问的是一个非常愚蠢的问题而责备我,但我已经花了几天时间在网上搜索答案,但似乎没有什么可以解决我的问题。
基本上,我想要做的就是了解我的各种测试应用程序控件的样式,以掌握最有效的方法以及如何使用它们。我在 'Page.Resources'.
中指定了一个名为“更简单”的样式背景样式的第一部分确实可以正常工作,并且我的按钮具有预期的渐变填充,但是,尽管我在几天的反复试验中尽了最大努力(主要是错误),但我仍然无法获得 'IsMouseOver' 触发做任何事情。事实上,几乎任何其他需要调用触发器的“事件”都完全拒绝做任何事情。
WPF 似乎完全忽略了我样式的整个“
我真的很感激有人用简单的语言向我解释为什么会发生这种情况,或者更确切地说,为什么没有发生这种情况,以及我如何才能让它发挥作用?
提前致谢。 '''
Title="Page1">
<Page.Resources>
<Style x:Key="mouseover"
TargetType="Grid">
<Setter Property="Background" Value="Red"/>
</Style>
<Style x:Key="simpler" TargetType="Button">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Red" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" >
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Green" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Page.Resources>
<!--xmlns:Models="clr-namespace:WpfUI.Models"-->
<Grid>
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="Yellow" Offset="0.972"/>
</LinearGradientBrush>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<WrapPanel Grid.Row="0" Grid.Column="1"
Grid.ColumnSpan="3"
Grid.RowSpan="1" Height="60">
<!--Button ONE-->
<Button
x:Name="btn1"
Height="50" Width="135"
Margin="5"
Click="Page1_Click"
Foreground="White"
Content="ewttwttrt"
Style="{StaticResource simpler}">
<!-- We put our "text" into a Stackpanel (or any similar control)
so that we can use the defined Template above, whch stops our
text from being rendered -->
<!--<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"
VerticalAlignment="Center">
<TextBlock FontFamily="Wingdings" FontSize="16" Text="ü"/>
<TextBlock Text="btn1-MyButtonTemplate"/>
</StackPanel>-->
</Button>
'''
我不确定 SO 是否真的适合初学者。
稍后。 你可能会发现这很有趣: https://social.technet.microsoft.com/wiki/contents/articles/32610.wpf-layout-lab.aspx
首先。 创建一个新的 wpf 应用程序。 在 mainwindow 内的网格中放置一个按钮。 它会填满你的网格,但别担心。
旋转它。 鼠标移到。 看到它变成浅蓝色了吗? 这样做的不是背景。 这是背景之上的东西。
尝试将其粘贴到开始 window 标签下方的所有内容中。
<Window.Resources>
<Style x:Key="simpler" TargetType="Button">
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Red" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}">
<ContentPresenter Margin="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
RecognizesAccessKey="True" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" >
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="#FFFFD190" Offset="0.35"/>
<GradientStop Color="Green" Offset="0.95"/>
<GradientStop Color="#FFFFD190" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Width="1155" Height="805">
<Button Style="{StaticResource simpler}">
Banana
</Button>
</Grid>
</Window>
很抱歉,但为了避免浪费您宝贵的时间,我刚刚发现了 PreviewMouseDown 属性,它让我解决了上面针对不支持 Click 的任何控件所描述的问题事件,所以没必要浪费时间回答这个问题,当然,除非你有更好的解决方案??