Настройка содержимого TextBlock и текста HyperlinkButton в пользовательском элементе управления Silverlight - PullRequest
0 голосов
/ 09 июня 2010

Я пытаюсь создать пользовательский элемент управления, который будет отображать кнопку гиперссылки с текстом под ссылкой. Идея состоит в том, чтобы срочные сообщения отображались на экране страницы Silverlight. Из того, что я прочитал, я подумал, что должен иметь возможность создать новый элемент управления, а затем создать некоторые свойства зависимости и привязать к ним динамические части компонентов, чтобы позволить мне добавить несколько экземпляров пользовательского элемента управления в свой Проект Silverlight. Вот мой XAML, который определяет элемент управления

<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="WhatsNew.UrgentStoryGridControl"
d:DesignWidth="608" d:DesignHeight="65" Background="White">
<UserControl.Resources>
    <Style x:Key="WhatsNewTitleStyle" TargetType="HyperlinkButton">
               Removed for Brevity
    </Style>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Height="65" Margin="0" VerticalAlignment="Bottom" Background="White">
    <StackPanel>
        <HyperlinkButton Style="{StaticResource WhatsNewTitleStyle}" Content="{Binding linkText}" HorizontalAlignment="Left" VerticalAlignment="Top" NavigateUri="{Binding linkURI}" Foreground="Red"/>
        <TextBlock  Style="{StaticResource WhatsNewTextStyle}" Text="{Binding storyText}" Margin="0,13,0,0" d:LayoutOverrides="Height"/>                        
    </StackPanel>
</Grid>

В коде позади я создал три свойства зависимости

Partial Public Class UrgentStoryGridControl 
Inherits UserControl

Public Shared linkTextProperty As DependencyProperty = DependencyProperty.Register("linkText", GetType(String), GetType(UrgentStoryGridControl), New PropertyMetadata("Link Text"))
Public Shared linkURIProperty As DependencyProperty = DependencyProperty.Register("linkURI", GetType(String), GetType(UrgentStoryGridControl), New PropertyMetadata("link.html"))
Public Shared storyTextProperty As DependencyProperty = DependencyProperty.Register("storyText", GetType(String), GetType(UrgentStoryGridControl), New PropertyMetadata("Story Text"))

Public Property linkText() As String
    Get
        Return GetValue(linkTextProperty)
    End Get
    Set(ByVal value As String)
        SetValue(linkTextProperty, value)
    End Set
End Property

Public Property linkURI() As String
    Get
        Return GetValue(linkURIProperty)
    End Get
    Set(ByVal value As String)
        SetValue(linkURIProperty, value)
    End Set
End Property

Public Property storyText As String
    Get
        Return GetValue(storyTextProperty)
    End Get
    Set(ByVal value As String)
        SetValue(storyTextProperty, value)
    End Set
End Property

End Class

Когда я размещаю этот элемент управления в своем проекте Silverlight с помощью Expression Blend, я вижу три свойства, перечисленные в разделе «Разное» окна свойств, как и следовало ожидать. Значения из PropertyMetadata заполняются как значения по умолчанию для этих свойств. Вот код из моего проекта Silverlight, где я оставляю значения по умолчанию в одиночку:

<local:UrgentStoryGridControl x:Name="urgentStory" Height="65"  />

Вот код, в котором я пытаюсь установить значения на что-то:

<local:UrgentStoryGridControl x:Name="urgentStory" Height="65" linkText="Test Link Text" linkURI="testpage.html" storyText="Sample Story Text" />

В любом случае я пытаюсь использовать элемент управления, при запуске приложения ничего не отображается. Я полагаю, что упускаю что-то маленькое, но, потратив сегодня много времени на изучение этого, я не нашел ничего, что указывало бы на то, что я упускаю или делаю неправильно.

1 Ответ

0 голосов
/ 09 июня 2010

Вам необходимо установить DataContext в вашем пользовательском элементе управления UserControl, иначе ваши привязки не будут работать.

В конструкторе UrgentStoryGridControl вы должны иметь возможность установить Me.DataContext = Me

...