У меня проблемы с чем-то, что кажется, должно быть очень простым, но на самом деле оказалось довольно сложным.Настойчивость WPF UI в TabControl
Допустим, у вас есть элемент управления TabControl, связанный с источником объектов ViewModels и элементами, отображаемыми с помощью DataTemplate. Теперь скажем, что DataTemplate состоит из сетки с двумя столбцами и разделителя Grid для изменения размеров столбцов.
Проблема заключается в том, что при изменении размеров столбцов на одной вкладке и переключении на другую вкладку также изменяются размеры столбцов. Это связано с тем, что TabControl использует DataTemplate среди всех вкладок. Этот недостаток устойчивости к пользовательскому интерфейсу применяется ко всем элементам шаблона, которые могут привести к разочарованию при настройке различных компонентов пользовательского интерфейса. Другим примером является положение прокрутки в DataGrid (на вкладке). DataGrid с несколькими элементами будет прокручиваться вне поля зрения (только одна строка будет видна), если DataGrid с большим количеством строк прокручивается вниз на другой вкладке. Вдобавок к этому, если TabControl имеет различные элементы, определенные в нескольких DataTemplates, представление сбрасывается при переключении между элементами типов differenet. Я понимаю, что этот подход экономит ресурсы, но возникающая функциональность кажется довольно противоречивой ожидаемому поведению пользовательского интерфейса.
И поэтому мне интересно, есть ли решение/обходное решение для этого, поскольку я уверен, что это то, с чем раньше сталкивались другие. Я заметил несколько подобных вопросов на других форумах, но не было реального решения. Один об использовании AdornerDecorator, но, похоже, не работает при использовании с DataTemplate. Я не заинтересован в привязке всех свойств пользовательского интерфейса (например, ширины столбца, позиции прокрутки) к моим ViewModels, и на самом деле я попробовал его для простого примера GridSplitter, и мне не удалось заставить его работать. Ширина параметра ColumnDefinitions не обязательно зависит от разделителя сетки. Несмотря на это, было бы неплохо, если бы это было общее решение. Есть предположения?
Если я отключаю TabControl и использую ItemControl, я столкнусь с аналогичной проблемой? Можно ли изменить стиль TabControl, чтобы он не делил ContentPresenter между вкладками?
Вы можете предоставить ресурс «ImitateTabControlStyle» для его проверки. Звучит неплохо –