Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置鼠标在wpf中输入椭圆笔划(边框颜色)_C#_Wpf_Eventtrigger - Fatal编程技术网

C# 设置鼠标在wpf中输入椭圆笔划(边框颜色)

C# 设置鼠标在wpf中输入椭圆笔划(边框颜色),c#,wpf,eventtrigger,C#,Wpf,Eventtrigger,Ellipse有一个名为IsMouseOver的属性,我们可以使用它来设置椭圆颜色,就像它一样。 但实际上,当鼠标在椭圆上时,笔划会发生变化(我们将椭圆画成一个圆),当鼠标在椭圆(圆)内时,颜色会恢复到原始值。 我知道ellipse有一个名为MouseEnter的事件,我们可以使用EventTrigger,但只能在EventTrigger中设置情节提要 <Grid> <Grid.ColumnDefinitions> <ColumnDefini

Ellipse有一个名为IsMouseOver的属性,我们可以使用它来设置椭圆颜色,就像它一样。 但实际上,当鼠标在椭圆上时,笔划会发生变化(我们将椭圆画成一个圆),当鼠标在椭圆(圆)内时,颜色会恢复到原始值。 我知道ellipse有一个名为MouseEnter的事件,我们可以使用EventTrigger,但只能在EventTrigger中设置情节提要

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