在silverlight自定义控件中设置TextBlock的内容和HyperlinkBut​​ton的文本

时间:2010-06-08 20:24:53

标签: silverlight custom-controls

我正在尝试创建一个自定义控件,该控件将显示一个超链接按钮,链接下方有一些文本。这个想法是在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

当我使用Expression Blend将此控件放在我的Silverlight项目上时,我会看到属性窗口的Miscellaneous部分中列出的三个属性,正如我所期望的那样。 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 :(得分:0)

您需要在自定义UserControl中设置DataContext,否则您的绑定将无效。

在你的UrgentStoryGridControl的构造函数中,你应该可以设置Me.DataContext = Me