wpf アプリケーションにカスタム コントロールがあります。TextBox
これは、ユーザーがテキストを入力して、入力に基づいてオプションの更新リストを取得できる カスタムの「オートコンプリート」です。
コントロール テンプレートは次のとおりです。
<ControlTemplate TargetType="{x:Type local:AutoCompleteTextBox}">
<Grid>
<Border x:Name="PART_ControlBorder" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="Stretch"/>
<Button x:Name="PART_DropDownButton" Grid.Column="1" />
</Grid>
</Border>
<Popup x:Name="PART_Popup" StaysOpen="False" Width="Auto" Height="Auto">
<ListBox x:Name="PART_ListBox" HorizontalContentAlignment="Stretch" SelectionMode="Single"/>
</Popup>
</Grid>
</ControlTemplate>
基本的に、ユーザーは に入力するTextBox
と、オプション付きの aPopup
が表示さListBox
れます。ListBox
ユーザーがカスタム コントロール コードからオプションを選択すると、 selecteditem のフィールドのTextBox
1 つからプロパティが入力されます。ListBox
(このフィールドの名前は文字列型として提供されますDependencyProperty
)
SelectedItem
DependencyProperty
私がバインドする は次のように宣言されています
Public Property SelectedItem As Object
Get
Return GetValue(SelectedItemProperty)
End Get
Set(ByVal value As Object)
SetValue(SelectedItemProperty, value)
End Set
End Property
Public Shared ReadOnly SelectedItemProperty As DependencyProperty = DependencyProperty.Register( _
"SelectedItem", GetType(Object), GetType(AutoCompleteTextBox), _
New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault))
問題
コントロールのSelectedItem
プロパティが作成/レンダリング時に既にバインドされている場合は、TextBox に「名前」を入力する必要がありますSelectedItem
(選択が変更されたときだけでなく、ListBox
現在の状態です)。
私が試したこと
ベース カスタム コントロールのandイベントでこれSelectedItem
にアクセスしようとしましたが、値が何もありません。ロードされたイベントを使用できません。これは、オーバーライドできないためです。EndInit
OnInitialize
コントロールが最初にロードされたときにどのイベントを使用するかを誰かが理解するのを手伝ってくれますか?
助けてくれてありがとう