Как сделать пользовательские элементы управления в Silverlight? - PullRequest
1 голос
/ 18 февраля 2009

Я создал пользовательский элемент управления, используя Expression Blend:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="MyProject.EditableField"
    d:DesignWidth="286" d:DesignHeight="20">

    <Grid x:Name="LayoutRoot">
        <TextBlock HorizontalAlignment="Left" Width="95" Text="Label:" TextWrapping="Wrap" x:Name="Label" FontSize="12"/>
        <TextBox Margin="99,0,0,0" x:Name="Value" Text="Value" TextWrapping="Wrap"/>
    </Grid>
</UserControl>

Содержит метку TextBlock и значение TextBox. Я хотел бы добавить несколько из них в мой XAML с их собственной меткой и значением, возможно, так:

<MyProject:EditableField Margin="30,180,0,0" Height="20" HorizontalAlignment="Left" VerticalAlignment="Top" Width="286" x:Name="FaxNumber">
            <Label>
                <Text>Fax number:</Text>
            </Label>
            <Value>
                <Contents>
                    111-222-333
                </Contents>
            </Value>
        </MyProject:EditableField>

Когда я говорю, возможно, это явно не работает. Какой будет правильный синтаксис для их добавления?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2009

Самый простой способ - добавить два новых свойства к коду, например, LabelText и ContentText. Соедините их, чтобы установить и получить свойства Text элементов управления TextBlock и TextBox соответственно.

Тогда вы бы использовали:

<MyProject:EditableField LabelText="Fax number:" ContentText="111-222-333" ...

Правильный метод - сделать то же самое, реализуя два свойства зависимостей (и, следовательно, поддерживая анимацию, привязку данных и т. Д.), И привязав текст элемента управления дочерних элементов управления к этим свойствам.

0 голосов
/ 18 февраля 2009

В коде позади:

public string LabelText
{
    get { return Label.Text; }
    set { Label.Text = value; }
}

public string ContentText
{
    get { return Value.Text; }
    set { Value.Text = value; }
}
...