У меня есть некоторые text data
, которые я хочу отобразить в Grid
, с тремя столбцами, средний столбец в два раза шире, чем два других, занимая всю ширину сетки. text
длинный и должен быть упакован. То, что я не могу получить на работу (и из других запросов здесь в прошлом, я вижу, что у других были подобные проблемы), это перенос слов и определение размера сетки для работы. Что у меня есть:
<Window.Resources>
<local:DTData x:Key="dtData" />
</Window.Resources>
<StackPanel DataContext="{StaticResource dtData}">
<ListBox ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border x:Name="a" Grid.Column="0" Margin="4"/>
<TextBlock Margin="4" Grid.Column="0" TextWrapping="Wrap"
Text="{Binding A}" Width="{Binding ActualWidth, ElementName=a }" MinWidth="100"/>
<Border x:Name="b" Grid.Column="1" Margin="4"/>
<TextBlock Margin="4" Grid.Column="1" TextWrapping="Wrap"
Text="{Binding B}" Width="{Binding ActualWidth, ElementName=b }" MinWidth="100"/>
<Border x:Name="c" Grid.Column="2" Margin="4"/>
<TextBlock Margin="4" Grid.Column="2" TextWrapping="Wrap"
Text="{Binding C}" Width="{Binding ActualWidth, ElementName=b }" MinWidth="100"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
При этом используется Border
трюк из WPF TextBox и поведение Scroll , чтобы принудительно работать перенос текста, но ширина столбца - либо минимальная установленная ширина, либо самое длинное слово, если оно больше.
Кто-нибудь знает способ заставить столбцы соответствовать ширине сетки?