我一直在开发一个wpf用户控件,作为增加自己知识的一种手段,也因为它在以后的项目中对我有用。基本上它是一个数据导航控件,看起来与下图不同。
每个按钮都有一个与之关联的默认图像,最终用户可以根据需要进行替换,使用以下代码实现;
Private Shared ReadOnly DefaultFirstImage As ImageSource = New BitmapImage(New Uri("pack://application:,,,/DataNavigator;component/Images/first16.png", UriKind.RelativeOrAbsolute))
'''////////////////////////////////////////////////////////////////////////////////////////////////////
''' <summary> Gets or sets the image first. </summary>
'''
''' <value> The image first. </value>
'''////////////////////////////////////////////////////////////////////////////////////////////////////
<Description("The image used to represent navigating to the first record in the records collection"), Category("Navigation Button Images")>
Public Property ImageFirst() As ImageSource
Get
Return DirectCast(GetValue(ImageFirstProperty), ImageSource)
End Get
Set(value As ImageSource)
SetValue(ImageFirstProperty, value)
End Set
End Property
''' <summary> The image first property. </summary>
Public Shared ReadOnly ImageFirstProperty As DependencyProperty = DependencyProperty.Register("ImageFirst", GetType(ImageSource), GetType(DataNavigator), New UIPropertyMetadata(DefaultFirstImage))
导航按钮还有一个text属性,默认情况下设置为空字符串,但最终用户可以自定义。
现在我想为此添加最后一个自定义,让最终用户可以完全没有默认图像,而只是简单地发送文本。我正在思考布尔依赖属性(比如称为RemoveFirstButtonImage),其默认值为false,当检查时会删除图像并设置一些默认文本。
我做过一些戏剧......
Public Shared ReadOnly RemoveDefaultFirstImageProperty As DependencyProperty = DependencyProperty.Register("RemoveDefaultFirstImage", GetType(Boolean), GetType(DataNavigator), New FrameworkPropertyMetadata(False, FrameworkPropertyMetadataOptions.AffectsRender, New PropertyChangedCallback(AddressOf OnRemoveDefaultFirstImageChanged)))
'''////////////////////////////////////////////////////////////////////////////////////////////////////
''' <summary>
''' Gets or sets a value indicating whether the hide Template button is
''' shown.
''' </summary>
'''
''' <value> true if show hide Template button, false if not. </value>
'''////////////////////////////////////////////////////////////////////////////////////////////////////
<Description("Set the visibility of the Template button on the Navigator Control"), Category("Navigator Buttons Default Image Visibility")>
Public Property RemoveDefaultFirstImage As Boolean
Get
Return CBool(GetValue(RemoveDefaultFirstImageProperty))
End Get
Set(ByVal value As Boolean)
SetValue(RemoveDefaultFirstImageProperty, value)
End Set
End Property
Private Shared Sub OnRemoveDefaultFirstImageChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim dn As DataNavigator = CType(d, DataNavigator)
Dim bln As Boolean = (CType(e.NewValue, Boolean))
If bln Then
dn.DefaultFirstImage = New BitmapImage(New Uri("pack://application:,,,/DataNavigator;component/Images/first16.png", UriKind.RelativeOrAbsolute))
Else
DataNavigator.DefaultFirstImage = Nothing
End If
End Sub
但是DefaultFirstImage属性的定义存在问题。
显然它应该不再共享,我怀疑它应该是公开的并且同时具有setter和getter但是这一切都需要完成以实现我想要的结果(我已经省去了添加默认文本但是这很容易)还是有其他我可能忽略的东西?
由于