2014-02-16 3 views
0

У меня есть холст, который берет много типов объектов и показывает их в определенных местах. У большинства объектов есть свойство Location, которое задается «Setter», и оно отлично работает.Доступ к объекту, содержащему сеттер внутри шаблона

У меня есть один сложный объект - собран из 4 растровых изображений. Я хочу иметь возможность устанавливать каждое растровое местоположение с помощью canvas.top и canvas.left, но не с местоположением в сеттере (они его не имеют), но с использованием собственного свойства location.

Вот код.

Моя проблема заключается в том, что WPF полностью игнорирует мое canvas.top и canvas.left назначение, даже если я использую числа и не привязываю - ничего не происходит.

В чем может быть проблема?

Вот мой текущий код. ComplexBitmap рисует себя в 0,0, а не там, где это ожидалось.

<ItemsControl Name="itemtest" ItemsSource="{Binding}" Height="576" Background="#FFB0B4B4" Width="704"> 
        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
          <local2:DragCanvas x:Name="canvas1" AllowDragging="true" AllowDragOutOfView="False" Width="704" Height="576" Background="#3AC2DED4"/> 
         </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
        <ItemsControl.ItemContainerStyle> 
         <Style TargetType="ContentPresenter"> 
          <Setter Property="Canvas.Left" Value="{Binding Path=Location.X, Mode=TwoWay}"/> 
          <Setter Property="Canvas.Top" Value="{Binding Path=Location.Y, Mode=TwoWay}"/> 
          <Setter Property ="Visibility" Value="{Binding Path= ShowOnDemo, Converter={StaticResource BooleanToVisibilityConverter}}" /> 
         </Style> 
        </ItemsControl.ItemContainerStyle> 
        <ItemsControl.ItemTemplateSelector> 
         <local:CustomTemplateSelector> 
          . 
          <local:CustomTemplateSelector.BitmapTemplate> 
           <DataTemplate> 
            <StackPanel> 
             <Image Source="{Binding Path=Bitmaps/myBitmap}" Canvas.Left="{Binding Path=Location.X, Mode=TwoWay}" Canvas.Top="{Binding Path=Location.Y, Mode=TwoWay}" /> 
            </StackPanel> 
           </DataTemplate> 
           </local:CustomTemplateSelector.BitmapTemplate> 
          . 
          <local:CustomTemplateSelector.ComplexBitmapTemplate > 
           <DataTemplate> 
            <Grid> 
             <StackPanel> 
              <Image Source="{Binding Path=TopLeftBitmapObj.myBitmap}" Canvas.Left="400" Canvas.Top="400" /> <-- Here I've tried to bind to another property, but even the 400 didn't work --> 
             </StackPanel> 
             <-- Here comes 3 more bitmaps --> 
            </Grid> 
           </DataTemplate> 
          </local:CustomTemplateSelector.ComplexBitmapTemplate> 
         </local:CustomTemplateSelector> 
        </ItemsControl.ItemTemplateSelector> 
       </ItemsControl> 
+1

Похоже, что ваши товары не могут быть размещены сразу на холсте? можете ли вы опубликовать скриншот визуального дерева, взятого из Snoop? –

+0

Дважды проверьте свой путь привязки источника. – Afaq

+0

@raptor - источник в порядке, как показывают изображения, но на 0,0, а не 400,400 .... – Dani

ответ

0

Пожалуйста, проверьте следующее:

  1. Запуск в визуальной студии в режиме отладки и проверки на ошибки пути (мотивационные Raptor)
  2. Удалить стиля от ведущего контента (как вы сказали , ComplexBitmap не содержит Location property ...)
+0

Попробуем, но все остальные элементы имеют местоположение ... – Dani

Смежные вопросы