2010-08-17 85 views
0
代码隐藏代码

有(在Silverlight 4应用程序),TextBlock的是“画布”的控制的内部显示的“CustomControl”的整型属性:的Silverlight:如何实现XAML

<Canvas Name="canvas" > 
    <Ellipse Fill="Yellow" Canvas.Top="8" Canvas.Left="8" Height="16" Width="16"> 
    </Ellipse> 
    <TextBlock Name="TeamNumberTextBlock" Text="9" Canvas.Top="8" Canvas.Left="8" TextAlignment="Center" FontStyle="Italic" /> 
</Canvas> 

作为文本可以改变它应该居中。这里是一个“代码隐藏的解决方案”:

public partial class FieldItem : UserControl 
{ 
    public FieldItem() 
    { 
     InitializeComponent(); 
    } 

    public int TeamNumber 
    { 
     private get 
     { 
      return _iTeamNumber; 
     } 
     set 
     { 
      _iTeamNumber = value; 
      TeamNumberTextBlock.Text = _iTeamNumber.ToString(); 
      TeamNumberTextBlock.SetValue(Canvas.LeftProperty, (TeamNumberTextBlock.Width - TeamNumberTextBlock.Width)/2); 
     } 
    } 

    private int _iTeamNumber; 
} 

当有人将设置一个新值控制,其“Canvas.Left”属性将被重新计算。

是否可以使用绑定(或任何其他可在设计模式下工作的机制)实现类似的功能?

谢谢!

回答

2

A Canvas可能不是那种事情的理想容器......您可以使用Grid实现相同的结果。你不会重新计算的位置,你只需要指定HorizontalAlignmentVerticalAlignmentTextBlock将保持自动居中:

<Grid> 
    <Ellipse Fill="Yellow" Height="16" Width="16"> 
    </Ellipse> 
    <TextBlock Name="TeamNumberTextBlock" Text="9" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       FontStyle="Italic" /> 
</Grid> 

Grid,你可以指定显示元素的行和列。如果只有一行和一列(这是默认值),则所有元素都显示在同一个“单元格”中。添加的最后一个元素出现在顶部(除非您指定Panel.ZIndex属性来更改Z顺序)

+0

有趣的解决方案,谢谢。 – Budda 2010-08-17 14:45:26