Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

ToolTip for DataGrid works only once

$
0
0

<Grid Background="Transparent" Margin="0,22,0,23" Height="250"><DataGrid x:Name="ViewDataGrid" ItemsSource="{Binding ItemData, Mode=TwoWay}" Margin="0,0,0,10" RowStyle="{StaticResource DataGridRowStyle}" HeadersVisibility="None" AutoGenerateColumns="False" RowHeaderWidth="0" ClipToBounds="True" HorizontalScrollBarVisibility="Disabled"><i:Interaction.Behaviors><cls:ScrollIntoViewBehavior/></i:Interaction.Behaviors><DataGrid.Resources><SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="DarkGray"/><Style TargetType="DataGridCell"><Setter Property="ToolTip"><Setter.Value><StackPanel><TextBlock Text="{Binding Key}" /><TextBlock Text="{Binding Value}" /></StackPanel></Setter.Value></Setter><Setter Property="Foreground" Value="Black"/><Style.Triggers><DataTrigger Binding="{Binding IsNewRecord, Mode=TwoWay}" Value="True"><Setter Property="Foreground" Value="White"></Setter></DataTrigger></Style.Triggers></Style></DataGrid.Resources><DataGrid.Columns><DataGridTextColumn Binding="{Binding Key}" Width="152"/><DataGridTextColumn Binding="{Binding Value}" Width="153"/></DataGrid.Columns></DataGrid></Grid>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Interactivity;

namespace xxx.Client.Presentation
{
    public class ScrollIntoViewBehavior : Behavior<DataGrid>
    {
        public static object _lastProduct { get; set; }
        public static int _lastIndex { get; set; }
        public static int _gridItemsCount { get; set; }
        public static int _gridItemsNewCount { get; set; }

        protected override void OnAttached()
        {
            base.OnAttached();
            this.AssociatedObject.SelectionChanged += DataGrid_SelectionChanged;
            this.AssociatedObject.Loaded += AssociatedObject_Loaded;
        }

        void AssociatedObject_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            object currentPos = _lastProduct;


            if (currentPos != null)
            {
                if (sender is DataGrid)
                {
                    DataGrid datagrid = sender as DataGrid;
                    datagrid.CurrentColumn = datagrid.Columns[0];
                    _gridItemsNewCount = datagrid.Items.Count;

                    if (_gridItemsCount == _gridItemsNewCount)
                    {
                        datagrid.Dispatcher.BeginInvoke((Action)(() =>
                        {
                            datagrid.ScrollIntoView(datagrid.Items[_lastIndex], datagrid.Columns[0]);
                            datagrid.UpdateLayout();
                        }));
                    }

                    else
                    {
                         datagrid.Dispatcher.BeginInvoke((Action)(() =>
                        {
                            datagrid.ScrollIntoView(datagrid.Items[_gridItemsNewCount-1], datagrid.Columns[0]);
                            datagrid.UpdateLayout();
                        }));

                    }

                }
            }
        }

        protected override void OnDetaching()
        {
            base.OnDetaching();

            this.AssociatedObject.SelectionChanged -= DataGrid_SelectionChanged;
        }

        void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

            if (sender is DataGrid)
            {
                DataGrid datagrid = (sender as DataGrid);
                if (datagrid.SelectedItem != null)
                {

                    datagrid.Dispatcher.BeginInvoke((Action)(() =>
                    {

                        if (datagrid.SelectedItem != null)
                        {
 //                           if (lastProduct != null)
                            {
                                _lastProduct = datagrid.CurrentItem as object;
                                _lastIndex = datagrid.SelectedIndex;
                                _gridItemsCount = datagrid.Items.Count;
                            }
                            if (_lastProduct != null)
                            {
                                datagrid.UpdateLayout();
                                datagrid.ScrollIntoView(datagrid.SelectedItem);
                            }
                            else
                            {
                                datagrid.UpdateLayout();
                                datagrid.ScrollIntoView(datagrid.SelectedItem);
                            }

                        }
                    }));
                }
            }



        }
    }
}


Viewing all articles
Browse latest Browse all 18858

Latest Images

Trending Articles



Latest Images