Пусть высота WPF Tabcontrol принимает высоту самого большого элемента?

Транзакции хранятся в локальном хранилище потоков. Если ваш другой метод работает с потоком с аннотацией @Transactional. По умолчанию установлено значение REQUIRED, и это означает, что если вы запустите метод, аннотированный с помощью @Transacitonal из другого потока, у вас будет новая транзакция (так как в локальном хранилище этого потока нет транзакции, хранящейся в этом потоке).

13
задан Inferis 2 July 2009 в 11:11
поделиться

3 ответа

На самом деле, это было проще решить, чем я думал. Так как у меня в любом случае был шаблон для TabControl , я установил высоту ContentPresenter , представляющего содержимое выбранной вкладки. Я делаю это с помощью конвертера, который привязывается к элементам TabControl , при необходимости измеряет их (используя Measure ) и проверяет DesiredSize на нужный мне размер.

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var items = value as ItemCollection;

        if (items == null)
            return null;

        double max = 0;
        foreach (TabItem item in items)
        {
            var content = item.Content as FrameworkElement;
            if (content == null) continue;

            if (!content.IsMeasureValid)
                content.Measure(new Size(int.MaxValue, int.MaxValue));

            var height = content.DesiredSize.Height;
            if (max < height)
                max = height;
        }

        return max;
    }

Это работает нормально, с некоторыми оговорками:

  • каждая вкладка должна быть FrameworkElement
  • , содержимое не меняет размер после загрузки (поскольку конвертер вызывается только тогда, когда свойство Items изменений, т.е. только один раз).
5
ответ дан 1 December 2019 в 19:31
поделиться

Проблема в том, что TabControl выгружает и перезагружает свое содержимое при переключении вкладок. Таким образом, он знает только размер содержимого текущей активной вкладки. Вы должны иметь возможность изменить TabControl так, чтобы он никогда не уничтожал своих дочерних элементов, и они всегда присутствовали (но, возможно, скрыты).

Это сообщение в блоге Эрика Берка должно помочь вам начать. Насколько я могу судить, просматривая его сообщение, вам нужно будет изменить его так, чтобы:

  • Все дочерние элементы загружались при загрузке TabControl .
  • Потомки скрываются, а не сворачиваются, когда они неактивный
6
ответ дан 1 December 2019 в 19:31
поделиться

Вероятно, это не так, как нужно для WPF, но, если у вас уже есть все элементы содержимого, вы могли бы просмотреть их при загрузке и программно установить высоту TabControl .

1
ответ дан 1 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: