【问题标题】:Simulate a long mouseOver wpf模拟长鼠标悬停 wpf
【发布时间】:2014-08-22 11:32:41
【问题描述】:

我有一个数据网格,其中包含 DatagridTemplateColumn 中的超链接,如下所示:

<DataGridTemplateColumn Width="170" SortMemberPath="Joueur.EtatCivil.Joueur_nom"  CanUserReorder="False" CanUserResize="True" Header="">
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate />
    </DataGridTemplateColumn.CellEditingTemplate>
    <DataGridTemplateColumn.CellStyle>
        <Style TargetType="DataGridCell" BasedOn="{StaticResource DatagridCellHyperlinkStyle}" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Border Padding="{TemplateBinding Padding}" Width="Auto"  VerticalAlignment="Center" SnapsToDevicePixels="True">
                            <TextBlock Foreground="{TemplateBinding Foreground}" Width="Auto" TextTrimming="CharacterEllipsis">
                        <Hyperlink IsEnabled="{TemplateBinding IsEnabled}">
                         <InlineUIContainer TextDecorations="{Binding Path=TextDecorations, RelativeSource={RelativeSource AncestorType=TextBlock}}" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType=TextBlock}}">
                          <ContentPresenter Content="{Binding DataContext.Joueur.EtatCivil.NomComplet, RelativeSource={RelativeSource AncestorType=DataGridRow}}"/>

                         </InlineUIContainer>
                            <Hyperlink.Style>
                                <Style TargetType="Hyperlink" BasedOn="{StaticResource HyperlinkStyle}">
                                    <EventSetter Event="Hyperlink.Click" Handler="ClickEvent" />
                                    <EventSetter Event="Hyperlink.MouseEnter" Handler="MouseOverEvent" />
                                    <EventSetter Event="Hyperlink.MouseLeave" Handler="ClicJoueurMouseLeaveEvent" />                                        
                                </Style>
                            </Hyperlink.Style>
                        </Hyperlink>
                            </TextBlock>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>

这可以正常工作并且符合预期,但是当我将光标在短时间内悬停多行时(可能

我的 MouseEnterEvent 调用了一个名为“Show();”的方法和我的 MouseLeaveEvent 一个名为“Hide();”的方法

这会显示/隐藏一个小弹出窗口以向用户显示更多数据。问题是我的 show();方法更新一个 Wpf 工具包图表,该图表似乎无法以该频率更新(0.5 秒内 10 次)。绑定似乎“崩溃”并且永远不会再次起作用。 这对我有帮助:Binding update adds news series to WPF Toolkit chart (instead of replacing/updating series))

我像这样更新我的图表:

this.colonnes.ItemsSource = null;
                _DataGraph = new ObservableCollection<GraphiqueValeurs>();

                _DataGraph.Add(new GraphiqueValeurs(value, "my string");

                this.colonnes.ItemsSource = _DataGraph;


                this.colonnes.UpdateLayout();

使用以下 xaml:

<chartingToolkit:Chart  VerticalAlignment="Top" HorizontalAlignment="Center" FontFamily="/BPM2015;component/#Open Sans Condensed" BorderBrush="Transparent" Name="columnChart" Title="Column Series Demo" Foreground="{DynamicResource CouleurTexte}" >
            <chartingToolkit:ColumnSeries Name="colonnes" Foreground="{DynamicResource CouleurTexte}"  DependentValueBinding="{Binding Valeur}"
        IndependentValueBinding="{Binding Name}"
        DataPointStyle="{StaticResource ColorByPreferenceColumn}" 
                                          >
    <chartingToolkit:ColumnSeries.DependentRangeAxis>
        <chartingToolkit:LinearAxis Orientation="Y" Minimum="0" Maximum="20" Title="" Foreground="Transparent" ShowGridLines="True">
            <chartingToolkit:LinearAxis.MajorTickMarkStyle>
                <Style TargetType="Line">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Style>
            </chartingToolkit:LinearAxis.MajorTickMarkStyle>
        </chartingToolkit:LinearAxis>
    </chartingToolkit:ColumnSeries.DependentRangeAxis>

</chartingToolkit:ColumnSeries>

<chartingToolkit:Chart.LegendStyle>
    <Style TargetType="Control">
        <Setter Property="Width" Value="0" />
        <Setter Property="Height" Value="0" />
    </Style>
</chartingToolkit:Chart.LegendStyle>
<chartingToolkit:Chart.TitleStyle>
    <Style TargetType="Control">
        <Setter Property="Width" Value="0" />
        <Setter Property="Height" Value="0" />
    </Style>
</chartingToolkit:Chart.TitleStyle>

所以我的问题是:如何避免所有这些快速 mouseEnter ?如果光标没有在超链接上停留至少 0.4 秒,我想避免我的 mouseEnter 函数调用“Show()”方法。

我该怎么做?

这个

谢谢

【问题讨论】:

    标签: c# wpf mouseover


    【解决方案1】:

    您可以使用DispatcherTimer 来增加调用函数的延迟,并将其与bool 标志相结合,该标志在MouseEnter 处理程序中设置为true,并在@987654326 中设置为false @处理程序。试试这个:

    private DispatcherTimer timer = new DispatcherTimer();
    private isMouseOver = false;
    

    ...

    timer.Interval = TimeSpan.FromMilliseconds(400);
    timer.Tick += Timer_Tick;
    

    ...

    private void MouseEnterHandler(object sender, MouseEventArgs e)
    {
        isMouseOver = true;
        timer.Start();
    }
    
    private void MouseLeaveHandler(object sender, MouseEventArgs e)
    {
        isMouseOver = false;
        timer.Stop();
    }
    
    private void Timer_Tick(object sender, EventArgs e)
    {
        if (isMouseOver) Show();
        timer.Stop();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-15
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2011-08-04
      • 2018-09-03
      • 1970-01-01
      相关资源
      最近更新 更多