Używam siatki WPF jako układu okna. Ma dwie kolumny i dowolną liczbę wierszy. Pierwsza kolumna jest używana specjalnie dla etykiet, a druga kolumna służy do wprowadzania danych przez użytkownika (np. TextBox, ComboBox itd.). Moje wymagania to:Funkcja TextFlock wtyczki WPF. Nie działa z funkcją Auto-size ColumnDefinition
- Pierwsza kolumna musi mieć minimalną szerokość 50 i maksymalną szerokość 180.
- pierwszy rozmiar kolumna musi do jego treści, z wyjątkiem, gdy przeciwstawia pierwszego wymogu.
- Druga kolumna musi zajmować całe pozostałe miejsce.
Próbowałem XAML poniżej:
<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>
miałem nadzieję, że w trzecim rzędzie etykiety „etykieta, która nie zmieści się w 180 jednostkach”, zostanie obcięty do czegoś takiego jak „Label, który wygrał ... ". Zamiast tego został przycięty do "Label That Will not" z połową "t".
Próbowałem inne podejście znalazłem gdzieś w Internecie.
<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>
Skończyło się na pracy z Expression Blend (czasami ...), ale nie podczas uruchamiania aplikacji. Podczas pracy wszystkie etykiety zniknęły całkowicie. W oknie obserwacyjnym widziałem, że wszystkie blokady TextBlock mają rzeczywistą szerokość równą 0, a wartość LabelColumn.ActualWidth równa się 80.
Jakie są inne opcje?