我目前正在使用WPF TimePicker控件。 控制繼承一個TextBox,它具有顯示時間跨度在以下格式的MaskedTexProvider:依賴屬性上的XAML綁定
「HH:MM」
到目前爲止,一切工作正常(向上和向下箭頭更改小時和分鐘底層TimeSpan等)。
我遇到了將TimePicker控件的TimeSpan屬性綁定到TimeSpan對象的問題。
如果我手動設置時間屬性(其露出下面的時間間隔對象),而不是當我嘗試通過XAML來設置時間屬性它的工作原理...
例如,下面的工作:
Private Sub Test_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
TimeSpan.TryParse("2:30", myTimePicker.Time)
End Sub
但是,如果我嘗試做一些像下面這樣,我的時間屬性的「設置」不會被調用:
<Window x:Class="Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:systhreading="clr-namespace:System.Threading;assembly=mscorlib"
xmlns:myNS="clr-namespace:myNS"
Title="Login" Height="768" Width="1024">
<Window.Resources>
<myNS:TestClass x:Key="myTestingClass"></myNS:TestClass>
</Window.Resources>
<DockPanel DataContext="{Binding Source={StaticResource myTestingClass}}">
<myNS:TimePicker x:Name="myTimePicker" Time="{Binding TheTimeSpan}"></myNS:TimePicker>
</DockPanel>
</Window>
這裏是我的TimePicker的時間屬性實現。
Public Class TimePicker
Inherits TextBox
Implements INotifyPropertyChanged
Public Shared TimeSpanProperty As DependencyProperty = DependencyProperty.Register("Time", GetType(TimeSpan), GetType(TimePicker))
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Private _timeSpan As TimeSpan
Public Property Time As TimeSpan
Get
Return _timeSpan
End Get
Set(ByVal value As TimeSpan)
_timeSpan = value
Dim str As String = _timeSpan.Hours.ToString.PadLeft(2, "0"c) + ":" + _timeSpan.Minutes.ToString.PadLeft(2, "0"c)
Me.Text = str
RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("Time"))
End Set
End Property
'..... the rest of the class implementation '
End Class
我在做什麼錯?
編輯:
事實證明,我有一個問題是防止 從工作結合的組合問題 。
首先,我不應該 使用私人TimeSpan成員爲我的 屬性。我應該一直使用 GetValue()和SetValue()方法來設置DependencyProperty代替 。其次,我沒有按照 DependencyProperty的 命名約定。它應該有 是「時間」屬性名稱,後跟 的「屬性」(換句話說,它應該被命名爲TimeProperty)。
第三,我需要使用 FrameworkPropertyMetadata類型到 指定當 屬性發生更改時調用的方法。這是我 把邏輯設置爲 TimePicker控件的文本。
大部分我發現 最有用的在尋找解決辦法 我的問題在這個MSDN 文章被找到的信息:Custom Dependency Properties
感謝您的幫助!
-Frinny
感謝您的指導。我按照你的建議回到了文檔中,發現了一些我做錯了的事情。最有用的文章是您發佈的鏈接之一的子文章:http://msdn.microsoft.com/en-us/library/ms753358.aspx再次感謝! – Frinavale 2011-02-11 15:04:29