我想编写一个ItemsControl派生的自定义控件。这部分来自需要,部分是作为一个学习练习 - 请不要建议我Style,DataTemplate,ControlTemplate一个ListBox等... I.e.请不要质疑需要 - 只要假设它是真的
我已经在网上找到了很多有用的ItemControl信息但没有明确的例子。
当我在VS中创建新的自定义控件时,我几乎得到了空代码,并且Generic.xaml带有<Style>
块,可以通过<Setter Property="Template">
等设置ControlTemplates,DataTemplates,Presenters等。但是什么是这里需要最小的xaml /代码来获取一个控件,它将ObservableCollection绑定到ItemsSoruce以显示为列表? 换句话说:什么是ItemsControl派生自定义控件的实用形式?
我需要ItemsPresenter吗?我是否必须在ControlTemplate中指定堆栈面板?我必须在<Setter Property="ItemTemplate">
上设置TargetType吗?等
勺子喂养首选,例如说:它很容易,我只需要将DataTemplate集成在项目控制容器的向量空间上,相对于面板主持人yada yada ......这是一个很大的帮助。
更多信息:控件是仅面向显示器,即没有所选项目的概念等。
提前致谢!
默认Generic.xaml(这里添加的最小值是多少?):
<Style TargetType="{x:Type local:MyItemsControlDerivedClass}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyItemsControlDerivedClass}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:3)
只需查看default styles(按照Default WPF Themes
链接):
e.g。列表框:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}">
<Border Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="true"
Padding="1">
<ScrollViewer Padding="{TemplateBinding Padding}"
Focusable="false">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled"
Value="false">
<Setter TargetName="Bd"
Property="Background"
Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
<Trigger Property="IsGrouping"
Value="true">
<Setter Property="ScrollViewer.CanContentScroll"
Value="false"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
答案 1 :(得分:0)
添加默认样式为H.B建议工作并使控件可用(项目显示)。删除ItemsPresenter(在ScrollViewer中)会破坏控件(无内容显示)。这篇文章解释了最新进展:
http://drwpf.com/blog/2009/05/12/itemscontrol-l-is-for-lookless/
基本上ControlTemplate必须具有:
a)ItemPresenter或
b)IsItemsHost属性设置为true的面板
即,您需要添加到stye的最小值是ControlTemplate,其中包含:
<StackPanel IsItemsHost="True" />
OR
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>