Wpf - Stretch ItemControl horizo​​ntaly

时间:2016-08-16 19:22:04

标签: c# wpf

我有下面的xaml,我希望itemsControl中的项目可以拉伸并始终触摸窗口的左侧和高度。我在HorizontalAlignment="Stretch"或/和ScrollViewer

中尝试了ItemsControl
<Window x:Class="myClass"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" Title="myTitle"
    Height="300" Width="300" 
    ResizeMode="CanResizeWithGrip">
<Grid>
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" Background="Blue" Width="300">
        <ItemsControl Name="myItemControl" HorizontalAlignment="Stretch" ItemsSource="{Binding myItemList}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="0,0,0,5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition MinWidth="15" />
                            <ColumnDefinition MinWidth="100" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding Id}" Grid.Column="0"/>
                        <TextBlock Text="{Binding Name}" Grid.Column="1"/>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
</Grid>

2 个答案:

答案 0 :(得分:0)

你的伸展在ItemsControl上,它将拉伸ItemsControl,而不是项目。如果要拉伸项目,则需要在ItemTemplate中拉伸网格。

答案 1 :(得分:0)

您的Grid对象很好地填满了您的ItemsControl。但是,如果您希望实际内容(IdName)触及左侧右侧,则需要将第二个TextBlock对齐到右侧。默认情况下,TextBlock控件与左侧对齐。

<TextBlock HorizontalAlignment="Right" Text="{Binding Name}" Grid.Column="1"/>

Stretch选项只会带你到目前为止。它实际上不会拉伸TextBlock中的文本,因为这会创建变形文本;不是大多数人想要的效果。这就是您实际内容的左右对齐方式。