我有一个listBox并像这样添加数据:
for (int x = 0; x < Orchestrator.Instance.getTopicCount(); x++)
{
listTopics.Items.Add(Orchestrator.Instance.getTopic(x));
}
但是我需要能够做一些事情,比如文本换行和分隔线,所以我想把它做成XAML。
微软展示了这一点:
<TextBlock Width="248" Height="24"
Text="{Binding ElementName=lbColor, Path=SelectedItem.Content,
Mode=OneWay}"
x:Name="tbSelectedColor"
Background="{Binding ElementName=lbColor, Path=SelectedItem.Content,
Mode=OneWay}"/>
但我真的不明白。这是我的XAML:
<ListBox Height="261" HorizontalAlignment="Left" Margin="352,38,0,0" Name="listContent" VerticalAlignment="Top" Width="391" Grid.Column="1" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" MaxWidth="391" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
我怎样才能达到我想要的目标? (分隔线,文本换行,所以我不必水平滚动,数据绑定)
答案 0 :(得分:1)
似乎你必须首先提升如何在WPF中使用数据绑定的相当陡峭的学习曲线。此后,您应该了解DataTemplates和ItemTemplates以获取分隔符等等。 尝试this让您入门
我衷心推荐的一本书是Manning的 WPF in Action 。
答案 1 :(得分:1)
您需要定义ListBox的ItemTemplate。 在您的资源中,添加以下内容:
<DataTemplate x:Key="myItemTemplate" TargetType="ListBoxItem">
<TextBlock Text="{Binding}"/>
</DataTemplate>
假设您的getTopic方法返回一个字符串,否则使用{Binding MyTopicProperty}
其中MyTopicProperty
是您的Topic类中的属性。根据需要自定义TextBlock。
然后像这样使用ListBox:
<ListBox ItemTemplate="{StaticResource myItemTemplate"/>
答案 2 :(得分:1)
要指定每个项目的布局,可以更改两个不同的内容:ItemContainerStyle,它提供用于每个ListBoxItem的ControlTemplate,或ItemTemplate,它提供用于呈现每个数据项的DataTemplate。如果您刚刚开始并且还没有掌握ControlTemplates,那么ItemTemplate更易于使用。
要让文字换行,有两件事要做。关闭ListBox的默认水平滚动(已经有),并将TextBlock的TextWrapping属性设置为Wrap。要进入TextBlock,您需要在ItemTemplate中定义它。这是一个内联声明的模板的简单示例,但您也可以将其作为资源拉出来。对于分界线,我使用边框的最简单方法,只有底部黑线。
<ListBox x:Name="listContent" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,0,0,1" BorderBrush="Black">
<TextBlock Text="{Binding}" TextWrapping="Wrap"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 3 :(得分:0)
以下是如何使用DataTemplate将列表框与RSS源绑定的示例:
<UserControl.Resources>
<XmlDataProvider x:Key ="DataRSS" XPath="//item" Source="http://rss.feedsportal.com/c/629/f/502199/index.rss">< /XmlDataProvider>
</UserControl.Resources>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<ListBox ItemsSource="{Binding Source={StaticResource DataRSS}}" Height="516" Margin="0,0,32,0" Background="{x:Null}" BorderBrush="#FF627DAE">
<ListBox.ItemTemplate >
<DataTemplate >
<Grid Width="400" Height="100" >
<Image Source="{Binding XPath=enclosure/@url}" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top" />
<TextBlock TextWrapping="Wrap" Text="{Binding XPath=title}" FontWeight="Bold" Grid.Column="2"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</grid>