我们正在尝试制作一个自定义控件,其中包含绑定到列表中的每个项目的文本框的包装部分。
像这样:
<ItemsControl x:Name="asdf">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<controls:WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但是,当我们将其转换为自定义控件时,它不会将ItemsPanel设置为WrapPanel,也不会将ItemTemplate设置为:
<ItemsControl x:Class="SilverlightApplication1.PillTagBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls= "clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<controls:WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
它只显示项目的绑定列表,例如根本没有样式:
<ItemsControl x:Name="asdf" />
我们如何将第一块XAML变成自定义控件?
谢谢!
答案 0 :(得分:2)
对于你想要做的事情,你不需要自定义控件,风格就足够了:
<Style x:Key="MyControlStyle" TargetType="ItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<controls:WrapPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<TextBox Text="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
然后在实例:
<ItemsControl x:Name="asdf" Style="{StaticResource MyControlStyle}" />
如果您出于其他原因需要自定义控件:
添加如下构造函数:
public MyItemsControl()
{
this.DefaultStyleKey = typeof(MyItemsControl);
}