我的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
属性在创建/渲染时已被绑定时,我需要使用SelectedItem
的“名称”填充TextBox(不仅仅是{{1}选择更改,这就是我现在拥有的)。
我尝试在基本自定义控件的ListBox
和SelectedItem
事件中访问此EndInit
,但它的值为nothing。我无法使用加载的事件,因为它不允许我使用它。
有人可以帮我弄清楚首次加载控件时要使用的事件。
感谢您的帮助
答案 0 :(得分:0)
尝试将SelectedItem属性绑定到ControlTemplate
<ScrollViewer x:Name="PART_ContentHost"
Content={TemplateBinding SelectedItem}
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
HorizontalAlignment="Stretch"/>