以编程方式添加的自定义列表框的自动换行
本文关键字:列表 自动换行 自定义 方式 添加 编程 | 更新日期: 2023-09-27 18:35:11
我有一个自定义列表框项,我正在尝试以编程方式将其添加到列表框中,并且我希望该项目的内容换行。
下面是自定义列表框项:
class PresetListBoxItem : ListBoxItem
{
public uint[] preset;
public PresetListBoxItem(uint[] preset = null, string content = "N/A")
: base()
{
this.preset = preset;
this.Content = content;
}
}
和 XAML:
<ListBox Name="sortingBox" Margin="5,5,0,5" Width="150" MaxWidth="150" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="2" CornerRadius="3" Margin="3">
<TextBlock Text="{Binding Path=Text}" TextWrapping="WrapWithOverflow" />
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
以及执行添加的代码:
PresetListBoxItem item = new PresetListBoxItem();
item.preset = new uint[] { };
item.Content = "This is a test of an extended line of text.";
sortingBox.Items.Add(item);
当我运行代码时,该项目被添加到框中,但边框根本不显示,也不会换行。
我已经在SO和Google上寻找答案,并且我使用了ListBox和ListViews,但似乎没有任何效果。
ListBoxItem
只是内容项的容器。如果要使用自己的ListBoxItem
请覆盖容器的模板而不是项。然后,对于TextBlock
中的正确绑定,您必须绑定到预设列表框项的Content
属性。
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:PresetListBoxItem">
<Border BorderBrush="Black" BorderThickness="2" CornerRadius="3" Margin="3">
<TextBlock Text="{Binding Path=Content, RelativeSource={RelativeSource AncestorType=local:PresetListBoxItem}}"
TextWrapping="WrapWithOverflow" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
但我认为这不是最好的方法。你为什么从ListBoxItem
派生?如果不这样做,XAML 将立即没问题。
item.Text = "This is a test of an extended line of text.";
class PresetListBoxItem
{
public uint[] preset;
public string Text { get; set; }
public PresetListBoxItem(uint[] preset = null, string content = "N/A")
: base()
{
this.preset = preset;
this.Text = content;
}
}