在XAML中的ItemsControl中拉伸项目

时间:2015-05-16 10:09:44

标签: xaml windows-phone-8.1

达到预期结果的最短代码是给我的:

<ItemsControl ItemsSource="{Binding GeneralBoolSettings}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <ToggleSwitch IsOn="{Binding IsOn, Mode=TwoWay}" OffContent="{Binding OffContent}" OnContent="{Binding OnContent}" />
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

原始问题

我遇到的问题就像水平拉伸ItemControl的项目一样简单。当我在使用XAML时,我没有WPF中的SharedSizeGroup这样的东西。

这里提出的解决方案:Horizontally Stretch Content in an ItemsControl遗憾的是不适合我。 我的代码:

<ItemsControl ItemsSource="{Binding GeneralBoolSettings}" HorizontalContentAlignment="Stretch">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <ToggleSwitch IsOn="{Binding IsOn, Mode=TwoWay}" OffContent="{Binding OffContent}" OnContent="{Binding OnContent}" />
            </Grid>
        </DataTemplate>
        </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Designer的一些屏幕截图:

ItemControl具有正确的(拉伸)大小 ItemControl has correct Size

DataTemplate已经太小了 enter image description here

我想避免绑定到父宽度;在我以前的尝试中,宽度有时(重新)设置为0,我将不得不删除绑定并再次添加它。另外:请不要使用代码和/或事件捕手,必须有一个优雅的解决方案来解决这个相当基本的问题!

老实说,我有点惊讶我无法让这个工作。 Mabye你可以推荐一本好书/网站来学习XAML基础知识的系统方法(当我们在这里时)?

1 个答案:

答案 0 :(得分:5)

您还需要使用ItemsControl的ItemContainerStyle属性设置每个项容器的水平对齐方式。

<ItemsControl ItemsSource="{Binding GeneralBoolSettings}" HorizontalContentAlignment="Stretch">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <ToggleSwitch IsOn="{Binding IsOn, Mode=TwoWay}" OffContent="{Binding OffContent}" OnContent="{Binding OnContent}" />
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemContainerStyle>
            <Style TargetType="ContentPresenter">
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
            </Style>
        </ItemsControl.ItemContainerStyle>
    </ItemsControl>