C# 设置鼠标在wpf中输入椭圆笔划(边框颜色)
Ellipse有一个名为IsMouseOver的属性,我们可以使用它来设置椭圆颜色,就像它一样。 但实际上,当鼠标在椭圆上时,笔划会发生变化(我们将椭圆画成一个圆),当鼠标在椭圆(圆)内时,颜色会恢复到原始值。 我知道ellipse有一个名为MouseEnter的事件,我们可以使用EventTrigger,但只能在EventTrigger中设置情节提要C# 设置鼠标在wpf中输入椭圆笔划(边框颜色),c#,wpf,eventtrigger,C#,Wpf,Eventtrigger,Ellipse有一个名为IsMouseOver的属性,我们可以使用它来设置椭圆颜色,就像它一样。 但实际上,当鼠标在椭圆上时,笔划会发生变化(我们将椭圆画成一个圆),当鼠标在椭圆(圆)内时,颜色会恢复到原始值。 我知道ellipse有一个名为MouseEnter的事件,我们可以使用EventTrigger,但只能在EventTrigger中设置情节提要 <Grid> <Grid.ColumnDefinitions> <ColumnDefini
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
<ColumnDefinition Width="90*" />
</Grid.ColumnDefinitions>
<Ellipse x:Name="checkButton" Grid.Column="0" Stroke="Black"></Ellipse>
<TextBlock x:Name="txtContent" Grid.Column="1" FontWeight="Bold" VerticalAlignment="Center" FontSize="14" HorizontalAlignment="Center" TextAlignment="Center">
<ContentPresenter />
</TextBlock>
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard></BeginStoryboard>
// something like <Setter Property="Stroke" Value="Red" /> here
</EventTrigger>
</ControlTemplate.Triggers>
//像这里一样
我只想在鼠标移动时,设置椭圆笔划;当鼠标移动发生时,将其放回原位。
有人知道吗
提前谢谢 试试这个:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Stroke" Value="Red" TargetName="checkButton"/>
</Trigger>
</ControlTemplate.Triggers>
希望有帮助:)
我只想在鼠标移动时,设置椭圆笔划;当鼠标移动发生时,将其放回原位
有几种方法可以做到这一点
使用简单的样式触发器和设置器
<Ellipse Fill="White" StrokeThickness="10">
<Ellipse.Style>
<Style TargetType="{x:Type Ellipse}">
<Setter Property="Stroke" Value="Red" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Stroke" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
使用混合行为(使用混合SDK)
不要忘记添加对Microsoft.Expressions.Interactions
和System.Windows.interactivity
如果您在visual studio中执行此操作,将会非常冗长。但是如果您使用Expression Blend,请相信我,只需单击几下即可。自定义复选框的完整解决方案:
<Window x:Class="WpfControlTemplates.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ControlTemplate x:Key="CustomChkBox" TargetType="CheckBox">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
<ColumnDefinition Width="90*" />
</Grid.ColumnDefinitions>
<Ellipse x:Name="checkButton" Grid.Column="0" Stroke="{TemplateBinding Property=BorderBrush}"></Ellipse>
<TextBlock x:Name="txtContent" Grid.Column="1" FontWeight="Bold" Foreground="{TemplateBinding Property=Foreground}" VerticalAlignment="Center" FontSize="14" HorizontalAlignment="Center" TextAlignment="Center">
<ContentPresenter />
</TextBlock>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="checkButton" Property="Stroke" Value="Blue"/>
<Setter TargetName="checkButton" Property="Fill" Value="Gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
<Grid>
<CheckBox Template="{StaticResource CustomChkBox}" Width="100" Height="25" Foreground="Red" Content="Newsletters " Background="#FF16CF38" BorderBrush="#FF14C9C9"/>
</Grid>
</Window>
要使用情节提要更改椭圆笔划属性,请执行以下操作:
诀窍是不同地设置笔划属性,以便我们可以从情节提要访问它。故事板没有任何画笔动画,但它有一个颜色动画
<Ellipse x:Name="checkButton" Grid.Column="1" StrokeThickness="5" Margin="82,0,61,0">
<Ellipse.Stroke>
<SolidColorBrush x:Name="StrokeColor" Color="Red"/>
</Ellipse.Stroke>
<Ellipse.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard x:Name="EllipseSB">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="StrokeThickness" To="10"/>
<ColorAnimation Storyboard.TargetName="StrokeColor" Storyboard.TargetProperty="Color" To="Blue"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<StopStoryboard BeginStoryboardName="EllipseSB"/>
</EventTrigger>
</Ellipse.Triggers>
</Ellipse>
这里还有一个解决方案
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
<ColumnDefinition Width="90*" />
</Grid.ColumnDefinitions>
<Ellipse x:Name="checkButton" Grid.Column="0" Stroke="Black" Fill="AliceBlue">
<Ellipse.Style>
<Style TargetType="{x:Type Ellipse}">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="0:0:0"
Storyboard.TargetProperty="(Ellipse.Stroke).(SolidColorBrush.Color)"
To="Red" AutoReverse="False"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard >
<ColorAnimation Duration="0:0:0"
Storyboard.TargetProperty="(Ellipse.Stroke).(SolidColorBrush.Color)"
To="Black"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
<TextBlock x:Name="txtContent" Grid.Column="1" FontWeight="Bold" VerticalAlignment="Center" FontSize="14" HorizontalAlignment="Center" TextAlignment="Center">
<ContentPresenter />
</TextBlock>
</Grid>
这需要Blend SDK。若用户正在设置笔划,你们不知道它的初始值。谁否决了这个答案。不要在没有给出适当评论的情况下否决投票。你的方法是正确的,它使用了一个技巧,提前谢谢!但结果是,当鼠标进入椭圆时,笔划发生变化;但如果鼠标位于椭圆内,笔划将变回原来的位置。我需要鼠标在里面时笔划保持不变。解决方案很简单,将属性Fill=“White”
添加到椭圆,使其像一个完整的圆,而不是一个边界笔划发生变化的磁盘。无论如何,谢谢你的回答@user1108069 Fill=“Transparent”更适合脚本动画场景。我知道了,非常感谢,我有一个问题..你从哪里获得这些知识?只是MSDN?或者一些书籍或网站?@user1108069 MSDN对于WPF来说非常糟糕。它以前很好,但现在已经失去了光泽。但对于文档,您必须查找MSDN。从2012年起,我就开始为WPF头疼,每次都是在沮丧中放弃。WPF是一种领先于时代的技术,但缺乏文档记录。所以,我的经验给我的建议是关注概念,以及它们之间的关系。不要深入内心。例如,为什么以及在何处使用触发器/Command/Dep属性/INotifyPropertyChanged/Binding/Templates等等。关于调试,请在调试器中查找stacktrace,仔细查看异常…查看我的答案并说明其错误原因?@AnjumSKhan实际上您的答案是正确的,并且是这些答案中最优雅的答案,它可以工作,不需要Blend SDK,还有一点不太对劲~:)P.s.实际上结果与我预期的有点不同,但我修改了代码使其正确,我已经在你的答案下发表了评论,请检查。:)实际上它没有帮助,这个方法与我在问题描述中提到的链接完全相同,我需要的是当鼠标在椭圆内时,颜色会改变,而不是悬停。所以,对不起,投反对票。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
<ColumnDefinition Width="90*" />
</Grid.ColumnDefinitions>
<Ellipse x:Name="checkButton" Grid.Column="0" Stroke="Black" Fill="AliceBlue">
<Ellipse.Style>
<Style TargetType="{x:Type Ellipse}">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="0:0:0"
Storyboard.TargetProperty="(Ellipse.Stroke).(SolidColorBrush.Color)"
To="Red" AutoReverse="False"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard >
<ColorAnimation Duration="0:0:0"
Storyboard.TargetProperty="(Ellipse.Stroke).(SolidColorBrush.Color)"
To="Black"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
<TextBlock x:Name="txtContent" Grid.Column="1" FontWeight="Bold" VerticalAlignment="Center" FontSize="14" HorizontalAlignment="Center" TextAlignment="Center">
<ContentPresenter />
</TextBlock>
</Grid>