2009-12-04 27 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>