powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / После ресайза GridSplitter не восстанавливается DataGrid
2 сообщений из 2, страница 1 из 1
После ресайза GridSplitter не восстанавливается DataGrid
    #38534681
Фотография Torre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Появилась неожиданная проблема
Есть окно, в окне Grid, в центре DataGrid, колонка справа и ряд снизу заняты под GridSplitter (BottomGridSplitter и RightSideGridSplitter соответственно)
За ними размещаются UserControls. В Ribbon находятся 2 ToggleButtons, которые показывают на форме эти контролы. Все работает нормально до тех пор пока пользователь не изменит GridSplitter, тогда пространство под контролами не освобождается при нажатии кнопок управления видимостью. Анализируя проблему обнаружил, что ячейка Grid (c DataGrid) не восстанавливает свои свойства по ширине или длине (на запуске значение помечено как *). Таким образом следует как-то восстановить размер таблицы после ресайзинга GridSplitter.
Кто работал с GridSplitter, подскажите идеи
...
Рейтинг: 0 / 0
После ресайза GridSplitter не восстанавливается DataGrid
    #38535638
Фотография Torre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вижу, с идеями у сообщества не все гладко, поэтому пришлось самому разбираться. Анализируя проблему выяснилось, что после ресайзинга Grid меняет значения на фиксированные. Решение проблемы удалось найти с помощью анимации, DataTrigger и DependencyProperty. Остановился на последнем, написал такой лисапед, может кому пригодится:

лисапед
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
public class GridRightSideHelper : GridSplitter
    {
        private static readonly Dictionary<DependencyObject, GridLength> ValuesList = new Dictionary<DependencyObject, GridLength>();

        public static GridSplitter GetRightSideWatch(DependencyObject obj)
        {
            return (GridSplitter)obj.GetValue(RightSideWatchProperty);
        }

        public static void SetRightSideWatch(DependencyObject obj, GridSplitter value)
        {
            obj.SetValue(RightSideWatchProperty, value);
        }

        public static readonly DependencyProperty RightSideWatchProperty = DependencyProperty.RegisterAttached(
            "RightSideWatch", typeof(GridSplitter), typeof(DependencyObject), new UIPropertyMetadata(null, OnRightSideWatchChanged));

        private static void OnRightSideWatchChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            if (obj == null) return;

            if (obj is Grid)
            {
                var grid = obj as Grid;
                var gs = e.NewValue as GridSplitter;
                if (gs != null)
                {
                    gs.IsVisibleChanged += (sender, args) => UpdateGrid(grid, (bool)args.NewValue);
                }
            }
        }


        private static void UpdateGrid(Grid grid, bool newValue)
        {
            var prev = grid.ColumnDefinitions.ElementAt(0);
            var curr = grid.ColumnDefinitions.ElementAt(1);
            var next = grid.ColumnDefinitions.ElementAt(2);

            if (newValue)
            {
                ValuesList[prev] = prev.Width;
                ValuesList[curr] = curr.Width;
                ValuesList[next] = next.Width;
            }
            else
            {
                if (ValuesList.Count != 0)
                {
                    grid.ColumnDefinitions.ElementAt(0).Width = ValuesList[prev];
                    grid.ColumnDefinitions.ElementAt(1).Width = ValuesList[curr];
                    grid.ColumnDefinitions.ElementAt(2).Width = ValuesList[next];
                }
            }
        }
    }


...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / После ресайза GridSplitter не восстанавливается DataGrid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]