代码之家  ›  专栏  ›  技术社区  ›  aku

WPF:当子控件模板更改时调整父容器的大小

  •  2
  • aku  · 技术社区  · 15 年前

    我有一个自定义的文本框错误模板。比如:

    <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>
    

    我的文本框放在DataGrid的单元格内。现在,当出现错误时,我希望更改该单元格的大小,以适应文本框的新模板。你知道如何实现这种行为吗?

    1 回复  |  直到 13 年前
        1
  •  2
  •   John Fisher    15 年前

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

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

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