Как связывать холст детей - PullRequest
0 голосов
/ 31 мая 2011

silverlight 4

              <ControlTemplate x:Key="MyTabItemContentTemplate">
    <StackPanel>
        <TextBlock Text="{Binding Path=name}" />
            <Popup x:Name="contextMenu" IsOpen="False">
                <Border Background="#A5FBFBFB" CornerRadius="6" BorderThickness="1" >
                    <StackPanel>
                        <Button x:Name="txbBusy" Content="isBusy"
                           Margin="5" Style="{StaticResource ButtonStyle1}">
                            <Button.Background>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="Black" Offset="0"/>
                                    <GradientStop Color="White" Offset="1"/>
                                </LinearGradientBrush>
                            </Button.Background>
                        </Button>
                        <Button x:Name="txbFree" Content="isFree"
                           Margin="5" Style="{StaticResource ButtonStyle1}"/>
                    </StackPanel>
                </Border>
            </Popup>
            <ItemsControl ItemsSource="{Binding Table}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas Margin="10" 
    Background="AliceBlue"   Width="300" Height="300" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Border Canvas.Left="{Binding x, Converter={StaticResource KeyIntToDoubleConverter}}" Canvas.Top="{Binding y, Converter={StaticResource KeyIntToDoubleConverter}}" MouseLeftButtonDown="Border_MouseLeftButtonDown">
                            <StackPanel>
                                <TextBox Text="{Binding x}"/>
                            </StackPanel>
                        </Border>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        <Button x:Name="btnSave" Content="Save" Click="btnSave_Click"/>
    </StackPanel>
</ControlTemplate>

TextBox - показать номер, но Canvas.Left="{Binding x}" - не работает

Ответы [ 3 ]

0 голосов
/ 01 июня 2011

'x' должен иметь тип double, а не int.

0 голосов
/ 03 июня 2011
  <ItemsControl ItemsSource="{Binding SomeItems}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}">
                            <TextBlock.RenderTransform>
                                <TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
                            </TextBlock.RenderTransform>
                        </TextBlock>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

связывание холст

0 голосов
/ 31 мая 2011

Проблема в том, что единственная вещь на холсте - это ItemsControl.Это, в свою очередь, использует по умолчанию стековую панель, в которую добавляются сгенерированные дочерние элементы, поэтому назначение Canvas.Left не оказывает никакого влияния.

Вам необходимо поместить Canvas внутри ItemsPanelTemplate, который, в свою очередь, назначается в качестве значения ItemsControl.Свойство ItemsPanel.Это заставит ItemsControl генерировать Canvas вместо StackPanel по умолчанию.

 <ItemsControl ItemsSource="{Binding Table}">
     <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
              <Canvas Margin="10" 
            Background="AliceBlue"   Width="300" Height="300" />
          </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel>
       <ItemsControl.ItemTemplate>
           <DataTemplate>
               <Border Canvas.Left="{Binding x}" MouseLeftButtonDown="Border_MouseLeftButtonDown">
                  <StackPanel>
                     <TextBox Text="{Binding x}"/>
                  </StackPanel>
               </Border>
            </DataTemplate>
         </ItemsControl.ItemTemplate>
      </ItemsControl>
...