我的 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
并Popup
显示一个ListBox
带有选项的选项。当用户从ListBox
自定义控件代码中选择一个选项时,将使用选定项的字段TextBox
之一中的属性填充。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
选择更改时,这就是我现在所拥有的)。
我试过的
我试图在基本自定义控件SelectedItem
的EndInit
和事件中访问它,但它的值是空的。OnInitialize
我不能使用加载的事件,因为它不允许我覆盖它。
有人可以帮我弄清楚首次加载控件时要使用什么事件。
谢谢你的帮助