2009-12-04 78 views
1

我希望創建一個控件,我稱之爲「AutoCompleteListBox」。如果您曾經使用hotmail發送電子郵件,那麼to:address線的工作方式就是我想要創建的。你有什麼看起來像一個輸入框,當你鍵入你得到一個匹配對象的下拉列表。一旦選擇了一個對象(聯繫人),它就會以矩形對象的形式添加到輸入框中。多個對象可以通過這種方式添加,輸入框就像一個包裝面板。您可以通過退格或單擊每個對象來刪除對象。Silverlight/WPF自定義控件模板幫助

我的方法是從子類化ItemsControl開始。我已經開始編寫它的控制模板,它基本上是一個包裝面板,我想顯示裝訂項目+文本框。我不知道如何讓綁定項目和文本框位於同一個包裝面板中。這是我有:

<Style TargetType="ctrl:AutoCompleteListBox"> 
    <Setter Property="Width" Value="200"/> 
    <Setter Property="Height" Value="100"/> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ctrl:AutoCompleteListBox"> 
       <ScrollViewer x:Name="RootScrollViewer" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Padding="0" Background="{TemplateBinding Background}"> 
        <toolkit:WrapPanel IsItemsHost="True"> 
         <!--Items Bound To ItemSource Go Here--> 
         <TextBox x:Name="txtInput"/> 
        </toolkit:WrapPanel> 
       </ScrollViewer> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter>   
</Style> 

我不知道如何表達我想要的。我知道你可以在控件模板中使用「ItemsPresenter」來顯示綁定項目,但是如何將我的文本框添加到與綁定項目相同的面板中?

我非常感謝任何幫助。這是否正確的方法來解決它?非常感謝。

回答

0

子項目控件是一個好的開始,但我認爲控件模板應該設置有點不同。 Silverlight工具包包含一個出色的自動完成框,您可以將其用於此確切目的。將它與一個單獨的項目控件結合起來,你應該擁有一些可以被設計爲看起來像活郵件「To」字段的東西。

<ControlTemplate> 
    <toolkit:WrapPanel> 
    <ItemsControl ItemsSource="{TemplateBinding Items}"> 
     <ItemsControl.ItemsPanel> 
     <StackPanel Orientation="Horizontal"/> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
     <!-- Add data template for the previously added items here --> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
    <toolkit:AutoCompleteBox ItemsSource="{TemplateBinding AutoCompleteItems}" /> 
    </toolkit:WrapPanel> 
</ControlTemplate>