0

我的 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>

基本上用户输入TextBoxPopup显示一个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选择更改时,这就是我现在所拥有的)。

我试过的

我试图在基本自定义控件SelectedItemEndInit和事件中访问它,但它的值是空的。OnInitialize我不能使用加载的事件,因为它不允许我覆盖它。

有人可以帮我弄清楚首​​次加载控件时要使用什么事件。

谢谢你的帮助

4

1 回答 1

0

尝试将 SelectedItem 属性绑定到ControlTemplate

<ScrollViewer x:Name="PART_ContentHost" 
              Content={TemplateBinding SelectedItem}
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
              HorizontalAlignment="Stretch"/>
于 2013-08-13T05:22:49.740 回答