Вы можете сделать это с помощью 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>
'UniformGrid' этого делать не будет , Вам нужна регулярная 'Grid' и определите прикрепленные свойства каждого элемента' Grid.Row' и 'Grid.Column', также посмотрите на [Помощник Grid Rachel's] (http://rachel53461.wordpress.com/2011/09/ 17/wpf-grids-rowcolumn-count-properties /) –
Черт, это раздражает. Я посмотрю на этого помощника Grid. Благодарю. –