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>

基本的に、ユーザーは に入力するTextBoxと、オプション付きの aPopupが表示さListBoxれます。ListBoxユーザーがカスタム コントロール コードからオプションを選択すると、 selecteditem のフィールドのTextBox1 つからプロパティが入力されます。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にアクセスしようとしましたが、値が何もありません。ロードされたイベントを使用できません。これは、オーバーライドできないためです。EndInitOnInitialize

コントロールが最初にロードされたときにどのイベントを使用するかを誰かが理解するのを手伝ってくれますか?

助けてくれてありがとう

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 に答える