代码之家  ›  专栏  ›  技术社区  ›  Budda

Silverlight4:如何在自定义列表中设置控件的属性

  •  0
  • Budda  · 技术社区  · 15 年前

                    <Pages:MyItemsControl ItemsSource="{Binding SquadFieldPlayers}">
                        <Pages:MyItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <Canvas Height="180" Width="169" />
                            </ItemsPanelTemplate>
                        </Pages:MyItemsControl.ItemsPanel>
                        <Pages:MyItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Pages:FieldItem />
                            </DataTemplate>
                        </Pages:MyItemsControl.ItemTemplate>
                    </Pages:MyItemsControl >
    

    “MyItemsContol”的源代码:

        public class MyItemsControl : ItemsControl
    {
        protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
        {
            FrameworkElement contentitem = element as FrameworkElement;
            if (contentitem != null)
            {
                Binding leftBinding = new Binding("PositionX");
                Binding topBinding = new Binding("PositionY");
                contentitem.SetBinding(Canvas.LeftProperty, leftBinding);
                contentitem.SetBinding(Canvas.TopProperty, topBinding);
                base.PrepareContainerForItemOverride(element, item);             
            }
        }
    }
    

    问题1:如何设置FieldItem控件的另一个属性(我在里面有textBlock,希望他显示数据对象中的其他数据项)?

    这是我的FieldItem控件:

    <UserControl x:Class="VfmElitaSilverlightClientView.Pages.FieldItem" ...>    
    <Grid Height="16" Width="16">
        <Ellipse Fill="Yellow" Height="16" Width="16">
        </Ellipse>
        <TextBlock Name="TeamNumberTextBlock" Text="22" TextAlignment="Center" FontStyle="Italic" />
    </Grid>
    

    问题2:为什么FieldItem的DataContext对象没有设置为my data对象?

    谢谢您!

    1 回复  |  直到 15 年前
        1
  •  0
  •   Budda    15 年前

    我不知道这是如何工作的,但要将我的控件绑定到数据对象,实际上不需要任何东西。属性映射是通过常规绑定完成的:

    <UserControl x:Class="VfmElitaSilverlightClientView.Pages.FieldItem" ...>    
    <Grid Height="16" Width="16">
        <Ellipse Fill="Yellow" Height="16" Width="16">
        </Ellipse>
        <TextBlock Name="TeamNumberTextBlock" Text="**{Binding TeamNumber}**"
                   TextAlignment="Center" FontStyle="Italic" />
    </Grid>
    

    我将感谢您对此的解释。提前感谢您的努力!