WPF:当子级的ControlTemplate更改时调整父容器的大小

时间:2009-07-14 05:34:42

标签: wpf styles controltemplate

我的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 个答案:

答案 0 :(得分:2)

选项1:在新类或现有类中创建一个属性,该类保存所需的单元格宽度。 (确保类和属性实现INotifyPropertyChanged。)将单元格的宽度绑定到该属性。发生错误时更改属性值,单元格应调整其大小。

选项2:使用网格以外的东西(DockPanel,StackPanel等)。正确安排这些东西将允许容器自动调整大小以适应内容。

选项3:找出使用网格大小属性的方法。设置Width =“Auto”通常允许列调整其内容的大小,但这可能取决于网格中的其他列。