WPF ItemsControl派生的自定义控件帮助
WPF ItemsControl派生的自定义控件帮助,wpf,custom-controls,itemscontrol,Wpf,Custom Controls,Itemscontrol,我想写一个ItemsControl派生的自定义控件。这部分是出于需要,部分是作为一个学习练习-请不要建议我的风格,数据模板,控制模板列表框等。。。也就是说,请不要质疑需求——只要假设它是真实的。 我在网上搜索了很多有用的ItemControl信息,但没有明确的例子。 当我在VS中创建新的自定义控件时,我得到了一个几乎为空的code behind和Generic.xaml,其中包含一个块,可以设置ControlTemplates、DataTemplates、,演示者通过等进行演示。但是,要获得将绑
我想写一个ItemsControl派生的自定义控件。这部分是出于需要,部分是作为一个学习练习-请不要建议我的风格,数据模板,控制模板列表框等。。。也就是说,请不要质疑需求——只要假设它是真实的。
我在网上搜索了很多有用的ItemControl信息,但没有明确的例子。 当我在VS中创建新的自定义控件时,我得到了一个几乎为空的code behind和Generic.xaml,其中包含一个
块,可以设置ControlTemplates、DataTemplates、,演示者通过
等进行演示。但是,要获得将绑定到ObservableCollection以ItemsProce显示为列表的控件,这里需要的最小xaml/代码是多少换句话说:ItemsControl派生的自定义控件的单独形式是什么?我需要一个ItemsPresenter吗?我必须在ControlTemplate中指定堆栈窗格吗?我必须在
上设置TargetType吗?等等汤匙喂食更喜欢这样说:这很容易,我只需要在物品控制容器的向量空间上集成数据模板,与面板演示者yada yada。。。这不是一个很大的帮助。 进一步信息:该控件仅面向显示,即没有所选项目的概念等。 提前谢谢 Default Generic.xaml(此处至少要添加什么?)
只需查看(遵循默认WPF主题链接):
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>
根据H.B的建议添加默认样式会起作用并使控件可用(显示项)。移除ItemsPresenter(在ScrollViewer中)会断开控件(无内容显示)。这篇文章解释了发生了什么:
从本质上讲,ControlTemplate必须具有以下任一项:
a) 项目演示者或
b) IsItemsHost属性设置为true的面板。
也就是说,您需要添加到stye中的最小值是一个ControlTemplate,其中包含:
或
谢谢HB-添加代码并删除部分代码直到失败,这对我帮助很大,让我找到了关键部分(见我自己的答案)。
<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>