【问题标题】:How binding canvas children如何绑定画布儿童
【发布时间】:2011-05-31 11:53:48
【问题描述】:

银光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}" - 无效

【问题讨论】:

    标签: silverlight silverlight-4.0 binding


    【解决方案1】:

    'x' 必须是 double 类型,而不是 int。

    【讨论】:

    • Laith,我添加了转换器,但这对我没有帮助。我在第一篇文章中更新了我的代码。
    • 您是否尝试将 int X 更改为 double X?出于测试目的尝试一下,看看它是否有效。我之前在使用 int 而不是 double 时遇到过这个问题。因此,删除转换器并更改代码以使 X 成为双倍。试试看。
    • 我将(使用转换器)int X 更改为 Double Х,但没有任何改变
    【解决方案2】:
      <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>
    

    binding-canvas

    【讨论】:

      【解决方案3】:

      问题是画布上唯一真正的东西是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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多