Wpf controls Silverlight/WPF自定义控件模板帮助
我希望创建一个我称之为AutoCompleteListBox的控件。如果您曾经使用hotmail发送电子邮件,那么“收件人:地址”行的工作方式就是我希望创建的。你有一个看起来像输入框的东西,当你输入时,你会得到一个匹配对象的下拉列表。选择对象接触后,它将作为矩形对象添加到输入框中。可以通过这种方式添加多个对象,并且输入框的作用类似于包裹面板。可以通过对对象进行退格或单击每个对象上的x按钮来删除对象 我的方法是首先将ItemsControl子类化。我已经开始编写它的控制模板,它基本上是一个包装面板,我想显示绑定的项目+一个文本框。我不知道如何使绑定项和文本框都位于同一个包装面板中。以下是我所拥有的:Wpf controls Silverlight/WPF自定义控件模板帮助,wpf-controls,silverlightcontrols,Wpf Controls,Silverlightcontrols,我希望创建一个我称之为AutoCompleteListBox的控件。如果您曾经使用hotmail发送电子邮件,那么“收件人:地址”行的工作方式就是我希望创建的。你有一个看起来像输入框的东西,当你输入时,你会得到一个匹配对象的下拉列表。选择对象接触后,它将作为矩形对象添加到输入框中。可以通过这种方式添加多个对象,并且输入框的作用类似于包裹面板。可以通过对对象进行退格或单击每个对象上的x按钮来删除对象 我的方法是首先将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,它会显示绑定的项目,但是如何将我的文本框添加到与绑定项目相同的面板中
我非常感谢您的帮助。这样做对吗?非常感谢。子类化items控件是一个好的开始,但我认为controltemplate的设置应该有所不同。Silverlight工具包包含一个优秀的自动完成框,您可以将其用于此目的。将其与单独的items控件相结合,您应该可以将其样式设置为与live mail 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>