首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >XAML列定义宽度*不占用可用空间

XAML列定义宽度*不占用可用空间
EN

Stack Overflow用户
提问于 2014-09-01 20:37:22
回答 1查看 3.3K关注 0票数 5

我知道列定义在XAML中是如何工作的,但是有一些事情我想做,但不知道怎么做。

我想要像这样的四栏:

代码语言:javascript
运行
复制
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="110" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="80" />
    <ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
  1. 列有固定宽度
  2. 列必须占用所有可用空间(是的,它位于列之间,这正是问题所在)
  3. 列有固定宽度
  4. 列有固定宽度

第二列包含文本,问题是当文本太短时,第二列没有占用所有可用空间。它会自动变小,每一行都是这样。我可以让它在文本块中使用以下代码:

代码语言:javascript
运行
复制
MinWidth="2000"

但这不是一个好方法,因为当屏幕很大时,这个数字可能太低了。

这里,包含4列的整个列表视图:

代码语言:javascript
运行
复制
<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="110" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="80" />
                    <ColumnDefinition Width="80" />
                 </Grid.ColumnDefinitions>
                <Image Height="110" Width="110" Grid.Column="0" Source="{Binding blabla}" HorizontalAlignment="Stretch" />
                <TextBlock Text="{Binding blabla}" TextWrapping="Wrap" Margin="5,0,0,0" Grid.Column="1" FontSize="16" HorizontalAlignment="Stretch" TextAlignment="Left" FlowDirection="LeftToRight" MinWidth="2000" VerticalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontStretch="UltraCondensed"/>
                <TextBlock Grid.Column="2" TextWrapping="Wrap" Foreground="Black" Margin="5,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Center"/>
                <Image Source="{Binding blabla, Converter={StaticResource ImgConverter}}" Grid.Column="3" Width="76" Height="76" HorizontalAlignment="Center" Stretch="None" VerticalAlignment="Center" Margin="0"/>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-02 00:13:54

您的布局定义良好,但遗漏了一件小事,它导致Listviewitem的内容被边缘化,因为它是在默认的ListViewItemStyle中定义的,它名为"ItemContainerStyle“,用于ListView控件。

您所需要做的就是将我修改的这个ListViewItemStyle添加到参考资料中,以便将内容横向和垂直地扩展到项目的所有可用空间中。

代码语言:javascript
运行
复制
<Style x:Key="StretchedListViewItemStyle"
           TargetType="ListViewItem">
         <Setter Property="HorizontalContentAlignment"
                Value="Stretch" />
        <Setter Property="VerticalContentAlignment"
                Value="Stretch" />
</Style>

然后将其设置为用于ItemContainerStyle的ListView,如下所示:

代码语言:javascript
运行
复制
<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" ItemContainerStyle="{StaticResource StretchedListViewItemStyle}"/>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25612621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档