gpt4 book ai didi

WPF TextBlock.TextTrimming 不适用于自动调整大小的 ColumnDefinition

转载 作者:行者123 更新时间:2023-12-04 07:59:34 27 4
gpt4 key购买 nike

我使用 WPF Grid 作为窗口的布局。它有两列和任意数量的行。第一列专门用于标签,第二列用于用户输入字段(例如 TextBox、ComboBox 等)。我的要求是:

  • 第一列的最小宽度必须为 50,最大宽度必须为 180。
  • 第一列的大小必须与其内容相符,除非它违反了第一个要求。
  • 第二列必须占据所有剩余空间。

  • 我尝试了下面的 XAML:
    <Grid>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" MinWidth="50" MaxWidth="180" />
    <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <TextBlock Text="First Name" TextTrimming="CharacterEllipsis" />
    <TextBox Grid.Column="1" Text="{Binding FirstName}" />

    <TextBlock Grid.Row="1" Text="Family Name" TextTrimming="CharacterEllipsis" />
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" />

    <TextBlock Grid.Row="2" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" />
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" />
    </Grid>

    我希望第三行标签“不适合 180 个单位的标签”会被截断为“胜出的标签……”。相反,它只是被剪裁为“不会的标签”,而“t”的一半丢失了。

    我尝试了一种在网上某处找到的不同方法。
    <Grid>
    <Grid.ColumnDefinitions>
    <ColumnDefinition x:Name="LabelColumn" Width="Auto" MinWidth="50" MaxWidth="180" />
    <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <TextBlock Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="First Name" TextTrimming="CharacterEllipsis" />
    <TextBox Grid.Column="1" Text="{Binding FirstName}" />

    <TextBlock Grid.Row="1" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Family Name" TextTrimming="CharacterEllipsis" />
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" />

    <TextBlock Grid.Row="2" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" />
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" />
    </Grid>

    它最终在 Expression Blend (Sometimes...) 上工作,但在运行应用程序时却没有。运行时,所有标签完全消失。我通过监 window 口看到所有 TextBlock 的实际宽度为 0,而 LabelColumn.ActualWidth 等于 80。

    还有哪些其他选择?

    最佳答案

    您需要拥有 MinWidthMaxWidth在 TextBlock 上设置,如设置 MinWidthMaxWidth在列定义上并不总是在渲染时得到尊重。
    使用 ActualWidth在绑定(bind)表达式中可能会出现问题,因为 ActualWidth在多次渲染过程中设置,可能会产生不可预知的结果

    关于WPF TextBlock.TextTrimming 不适用于自动调整大小的 ColumnDefinition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4243367/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com