2011-01-22 23 views
8

Próbuję utworzyć płótno, z elementami znajdującymi się w określonych lokalizacjach na kanwie, ponieważ nie mogę powiązać źródła i szablonu bezpośrednio z płótnem, użyłem elementu ItemsControl. Ale jest problem, że wszystkie przedmioty znajdują się w punkcie 0,0. I testowałem Wiązania, które nie zwracają 0,0. Jak mogę to zrobić, aby produkty znajdowały się we właściwym miejscu?Wiązanie płótna w silverlight

Czy dopuszczalne jest również tworzenie 2 warstw na płótnie, gdzie każda warstwa jest powiązana z innym źródłem i używa innego szablonu?

Jest w Silverlight

<ItemsControl Grid.Row="1" Grid.Column="1" 
       Width="650" Height="650" 
       ItemsSource="{Binding Skills}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas Margin="0" 
       Width="650" Height="650" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Canvas.Top="{Binding Top}" Canvas.Left="{Binding Left}"> 
        <TextBlock Text="{Binding Name}" /> 
       <Image Source="{Binding Icon}" /> 
       <StackPanel Orientation="Horizontal" > 
        <TextBlock FontWeight="Bold" TextAlignment="Center" Text="{Binding SkillPointsStatusText}" /> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

test z ItemContainerStyle

<ItemsControl Grid.Row="1" Grid.Column="1" 
       Width="650" Height="650" 
       ItemsSource="{Binding Skills}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas Margin="0" 
       Width="650" Height="650" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Name}" /> 
       <Image Source="{Binding Icon}" /> 
       <TextBlock FontWeight="Bold" TextAlignment="Center" Text="{Binding SkillPointsStatusText}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Canvas.Top" Value="{Binding Top}" /> 
      <Setter Property="Canvas.Left" Value="{Binding Left}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

Cóż ja porzuciłem ten projekt, ale pozostawi pytanie otwarte należy mieć anwser

+0

Dodałem bounty odkąd prawie zabity pytanie, kiedy zapytałeś o moją niedziałającą odpowiedź, przepraszam za to. Mam nadzieję, że to przyniesie mu uwagę, na którą zasługuje. –

+0

Czy możesz opublikować kod zajęć, z którymi chcesz się połączyć? – viggity

Odpowiedz

7

All Poniższe nie działa w SL4, ponieważ zależy od powiązań w Setter.Value.


spróbuj ustawić wiązania w ItemContainerStyle od swojej StackPanel nie jest elementem głównym; Twój szablon zostanie umieszczony w ContentPresenter, więc twoje właściwości związane z pozycjonowaniem kanwy w StackPanel zostaną zignorowane.

<ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="Canvas.Top" Value="{Binding Top}" /> 
     <Setter Property="Canvas.Left" Value="{Binding Left}" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 

Edit: Jeśli Silverlight nie obsługuje ItemContainerStyle można ustawić uniwersalny styl ContentPresenters który powinien działać tak samo dobrze:

<ItemsControl ItemsSource="{Binding Data}"> 
     <ItemsControl.Resources> 
      <Style TargetType="ContentPresenter"> 
       <Setter Property="Canvas.Left" Value="{Binding Left}"/> 
       <Setter Property="Canvas.Top" Value="{Binding Top}"/> 
      </Style> 
     </ItemsControl.Resources> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Canvas/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       ... 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
+0

Gdzie należy wstawić ? Ciągle pojawia się błąd "Właściwość attachable" ItemContainerStyle "nie została znaleziona w typie" ItemsControl "". – Androme

+0

To nie jest załączona właściwość, umieszczasz ją jako element podrzędny ItemsControl w taki sam sposób jak . to znaczy ** nie ** należą do ItemTemplate. –

+0

Zobacz, czy wstawiłem go do pierwszego posta, to mi pomyłkę, Błąd Właściwość "ItemContainerStyle" nie istnieje w typie "ItemsControl" w przestrzeni nazw XML "http://schemas.microsoft.com/winfx/2006/xaml/presentation '. – Androme