У меня есть список WPF с пользовательскими элементами. Каждый элемент представляет собой пользовательский элемент управления, состоящий из сетки с двумя текстовыми полями. Я хочу, чтобы правильный занимал все пространство, чтобы заполнить ListBoxItem. Но все, что я получаю, - это то, что сам элемент занимает все пространство, а текстовое поле принимает размер его содержимого.
Итак, это список:
<ListBox x:Name="leftListBox" Grid.Column="0" Margin="10"
HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<local:CustomLine />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
И пользовательский контроль:
<UserControl x:Class="SharpComparer.CustomLine"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="30">
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox x:Name="NumberColumn" x:FieldModifier="public"
Text="{Binding LineNumber}"
Grid.Column="0" HorizontalAlignment="Right" />
<TextBox x:Name="TextColumn" x:FieldModifier="public"
Text="{Binding Text}"
Grid.Column="1" HorizontalAlignment="Left" />
</Grid>
</UserControl>
То, что я уже попробовал после некоторого исследования на некоторых постах MSDN и здесь, по поводу переполнения стека: установка HorizontalContentAlignment на Stretch для Listbox.ItemContainerStyle. Я использовал некоторые границы, чтобы найти кусок, который создает проблемы. Кажется, ListBoxItems занимают всю ширину, пользовательский контроль и его сетку. Текстовое поле не занимает все пространство, хотя я думал, что Width="*"
внутри ColumnDefinition сетки сделает это.
Другая идея состояла в том, чтобы привязать ширину текстового поля к его родительскому размеру, но затем он также занимает пространство левого текстового поля (что имеет смысл, потому что он получает всю ширину), и вычитание этой ширины, похоже, не работает.
Что я делаю не так?