2013-06-20 1 views
0

Я использую ItemsControl и имею несколько кнопок и размещаю их в определенном месте на холсте. Тем не менее, Canvas.Left и Canvas.Top всегда размещают все кнопки на 0,0.Использование ItemsControl для привязки кнопок верхняя/левая позиция на холсте Windows Phone

 <ItemsControl x:Name="itemsControl" ItemsSource="{Binding Tiles}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Canvas /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Button Width="{Binding Side}" 
           Height="{Binding Side}" 
           Background="{Binding BgColor}"    
           Canvas.Left="{Binding Left}" Canvas.Top="{Binding Top}" />   
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 


     </ItemsControl> 
+0

будет не лучше ли использовать 'Margin'? –

+0

В целом это должно сработать. Проверьте, что привязки в порядке (т. Е. У вас нет ошибок привязки в окне вывода во время отладки). Другой способ - попытаться использовать 'Grid' вместо' Canvas' для 'ItemsPanelTemplate', привязывая' Grid.Column' и 'Grid.Row' к требуемым значениям. – Haspemulator

+0

Мне нужно использовать Canvas, потому что мне нужно разместить эти кнопки или графические элементы случайным образом на странице, которая не содержит столбцов/строк – PutraKg

ответ

1

Лучший ответ, который я нашел для этого использовать RenderTransform в вашем DataTemplate

<ItemsControl x:Name="itemsControl" ItemsSource="{Binding Tiles}"> 
<ItemsControl.ItemsPanel> 
<ItemsPanelTemplate> 
<Canvas /> 
</ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 
<ItemsControl.ItemTemplate> 
<DataTemplate> 
<Button Width="{Binding Side}" Height="{Binding Side}" Background="{Binding BgColor}"> 
<Button.RenderTransform> 
<TranslateTransform X={Binding Left} Y ={Binding Top}/> 
</Button.RenderTransform>    
</Button>  
</DataTemplate> 
</ItemsControl.ItemTemplate> 
</ItemsControl> 
Смежные вопросы