我想創建一個自定義控件,它將顯示鏈接下面的一些文本的超鏈接按鈕。這個想法是在Silverlight頁面的屏幕上顯示緊急消息。從我讀過的內容中,我認爲我應該能夠創建一個新的控件,然後創建一些依賴屬性,並將組件的動態部分綁定到它們,以便允許我將自定義控件的多個實例添加到我的Silverlight項目。這是我的XAML定義控制在Silverlight自定義控件中設置TextBlock的內容和HyperlinkButton的文本
<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項目這種控制,我看到屬性窗口的其他部分中列出的三個屬性,就像我期望的那樣。來自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" />
無論哪種方式,我嘗試使用控件,我在啓動應用程序時沒有顯示任何內容。我認爲我錯過了一些小東西,但是今天花了很多時間研究這個之後,我沒有發現任何能夠表明我失蹤或做錯的事情。
大衛, 感謝您的澄清。我不知道爲什麼我沒有在任何地方看到這個記錄,但我只是嘗試了你的建議,它的工作原理與我想要的完全一樣。 – BMcBride 2010-06-09 01:06:31