网格列中的 XAML 拉伸文本块
Posted
技术标签:
【中文标题】网格列中的 XAML 拉伸文本块【英文标题】:XAML Strech TextBlock in Grid Colum 【发布时间】:2015-12-23 17:49:19 【问题描述】:每个列表项必须是
TextBlock 1 以 100% 的宽度填充第一行;
TextBlock 2,3,4 必须在单独的行中分别填充 33%;
为什么 TextBlock 2,3,4 不拉伸?
<ListView.ItemTemplate><DataTemplate><StackPanel>
<TextBlock Text="Binding Name" />
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock TextAlignment="Right" Grid.Row="0" Grid.Column="0"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Text="Binding Rest" FontSize="28"/>
<TextBlock TextAlignment="Right" Grid.Row="0" Grid.Column="1"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Text="Binding Currency.Name" FontSize="25"/>
<TextBlock TextAlignment="Right" Grid.Row="0" Grid.Column="2"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Text="Binding FullRest" FontSize="22"/>
</Grid>
</StackPanel></DataTemplate></ListView.ItemTemplate>
附言
如何在设计时在列表视图中添加 1...x 行?
【问题讨论】:
【参考方案1】:使用 ListView.ItemContainerStyle
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
【讨论】:
【参考方案2】:这段代码(具有正常值,因为我没有底层数据结构)对我来说很好。
但是,不同的行可以有不同的宽度。这可以通过将 StackPanel 的 Width 设置为 ActualWidth - listview 的边距来解决。
您可以在此处找到有关如何添加模拟数据的一些信息,以便在设计器中使用:How to get mock data into listview during design time and real data at run time in WPF
【讨论】:
【参考方案3】:我使用 ListBox 以类似的方式绑定我的数据。
您需要为堆栈面板指定特定宽度
您必须将 textwrapping 属性设置为“不换行”
<ListBox x:Name="listbox" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Width="480">
<TextBlock Text="Binding main" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock TextWrapping="NoWrap" Text="Binding one"/>
<TextBlock TextWrapping="NoWrap" Text="Binding two" Grid.Column="1"/>
<TextBlock TextWrapping="NoWrap" Text="Binding thr" Grid.Column="2"/>
</Grid>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这非常适合我!
【讨论】:
以上是关于网格列中的 XAML 拉伸文本块的主要内容,如果未能解决你的问题,请参考以下文章
在使用 react-select Select 的同一网格中时,文本字段不会拉伸