WPF UniformGrid以相反的顺序排列

时间:2013-11-28 21:08:31

标签: c# .net wpf grid

我有一个IList字符串,我想将每个字符串放在一个按钮中,按照左下方的顺序排列;

enter image description here

但是我无法想到这样做的方法,因为字符串的数量不是有限的,所以我不能只使用带有col / row定义的网格。有人试过在WPF中这样做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用WrapPanel执行此操作。 WrapPanel通常不支持从右到左,但您可以通过翻转整个面板的布局转换然后再为每个孩子翻转来绕过它:

<Window.Resources >
    <x:Array Type="{x:Type sys:String}" x:Key="theItems" xmlns:sys="clr-namespace:System;assembly=mscorlib">
        <sys:String>1</sys:String>
        <sys:String>2</sys:String>
        <sys:String>3</sys:String>
        <sys:String>4</sys:String>
        <sys:String>5</sys:String>
        <sys:String>6</sys:String>
        <sys:String>7</sys:String>
    </x:Array>
</Window.Resources>

<Grid>
    <ItemsControl Name="itemsControl" FontSize="72" ItemsSource="{StaticResource theItems}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Vertical" HorizontalAlignment="Right">
                    <WrapPanel.LayoutTransform>
                        <ScaleTransform ScaleX="-1" ScaleY="1" />
                    </WrapPanel.LayoutTransform>
                </WrapPanel>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemContainerStyle>
            <Style TargetType="ContentPresenter">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Button Width="100" Height="100" Margin="10">
                                <ContentPresenter Content="{Binding}"/>
                            </Button>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="LayoutTransform">
                    <Setter.Value>
                        <ScaleTransform ScaleX="-1" ScaleY="1" />
                    </Setter.Value>
                </Setter>
            </Style>
        </ItemsControl.ItemContainerStyle>
    </ItemsControl>