Silverlight: как реализовать код CodeBehind в XAML - PullRequest
0 голосов
/ 17 августа 2010

Существует свойство int для CustomControl (в приложении Silverlight 4), TextBlock отображается внутри элемента управления Canvas:

<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>

Поскольку текст может быть изменен, он должен быть центрирован. Вот «CodeBehind-решение»:

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 будет пересчитано.

Возможно ли реализовать подобную функциональность с помощью привязки (или любого другого механизма, работающего в режиме разработки)?

Спасибо!

1 Ответ

2 голосов
/ 17 августа 2010

A Canvas, вероятно, не идеальный контейнер для такого рода вещей ... вы можете достичь того же результата с Grid.Вам не нужно пересчитывать позицию, вам просто нужно указать HorizontalAlignment и VerticalAlignment, а TextBlock останется центрированным автоматически:

<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-порядка)

...