WPF: изменить размер родительского контейнера при изменении дочернего ControlTemplate - PullRequest
2 голосов
/ 14 июля 2009

У меня есть собственный шаблон ошибки для моего TextBox. Примерно так:

<Style TargetType="{x:Type TextBox}" x:Key="ErrorTemplateStyle">
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <StackPanel Orientation="Vertical">
                    <Border BorderBrush="Orange" BorderThickness="1">
                        <AdornedElementPlaceholder />
                    </Border>
                    <TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem}" />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Мой TextBox находится внутри ячейки DataGrid. Теперь, когда происходит ошибка, я хочу изменить размер этой ячейки, чтобы разместить новый шаблон для моего TextBox. Любые идеи, как это поведение может быть достигнуто?

1 Ответ

2 голосов
/ 21 июля 2009

Вариант 1. Создайте свойство в новом или существующем классе, которое содержит желаемую ширину ячейки. (Убедитесь, что класс и свойство реализуют INotifyPropertyChanged.) Свяжите ширину ячейки с этим свойством. Измените значение свойства при возникновении ошибки, и ячейка должна изменить свой размер.

Вариант 2. Использование чего-либо, кроме сетки (DockPanel, StackPanel и т. Д.). Правильное расположение этих вещей позволит контейнеру автоматически соответствовать размеру содержимого.

Вариант 3: выяснить, как использовать свойства размеров сетки. Параметр Width = "Auto" обычно позволяет изменять размер столбца по своему содержанию, но это может зависеть от других столбцов в сетке.

...