我使用ListBox
来显示一些网格。
我想创建一些将基于(派生自)ListBox
的类,并更改此派生类的ItemTemplate
。
我该怎么做?
我尝试定义一个派生自UserControl
类的类 - 并将派生类更改为ListBox
类旁边的UserControl
- 但这不起作用。
还有其他办法吗?
我需要能够更改ListBoxItem
中的ListBox
模板,就像我添加到简单的silverlight页面的ListBox
一样。
感谢您的帮助。
答案 0 :(得分:1)
你可以做的是创建一个模板化控件(你可以通过视觉工作室Add - New Item菜单轻松创建一个),你可以从ListBox派生出来:
public class MyListBox : ListBox
{
public MyListBox()
{
this.DefaultStyleKey = typeof(MyListBox);
}
}
当您创建模板化控件时,它还将创建文件夹主题,并在其中创建定义样式的generic.xaml。 之后从here获取ListBox - Style并将其复制并粘贴到您的generic.xaml中的正确位置(您还需要ValidationTooltipTemplate):
<Style TargetType="local:MyListBox">
<Setter Property="Padding" Value="1"/>
<Setter Property="Background" Value="#FFFFFFFF" />
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="TabNavigation" Value="Once" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="BorderBrush"> ...
好的,之后在相同的xaml中定义ItemTemplate:
<DataTemplate x:Key="MyItemTemplate">
并将其添加到ListBox样式的Setter List中:
<Style TargetType="local:MyListBox">
<Setter Property="ItemTemplate" Value="{StaticResource MyItemTemplate}"/>^
现在它是您的默认模板。
但是,您是否需要向ListBox添加任何特定行为,因为您希望从中继承它。如果您只想添加特定的项目模板,我不建议从ListBox派生(事实上,DataTemplate不是通用的,它总是特定于DataType)。如果你没有添加特定的行为,我会去创建一个全局的DataTemplate(可能在你的app.xaml中定义)并在每次需要时引用它作为DataTemplate,或者我会用这个DataTemplate创建一个特定的样式并将样式设置为常见的ListBox。
如果您有任何疑问,请发表评论。
希望这有帮助!
BR,
TJ
答案 1 :(得分:1)
其他方法,如果您希望控件默认显示为ListBox。只需创建一个派生自ListBox的类,并在默认构造函数中修改默认样式键:
public class MyListBox : ListBox
{
public MyListBox()
{
// the control would look like a listBox by default
DefaultStyleKey = typeof (ListBox);
}
(...)
}