带有自定义项模板的WPF列表框

时间:2015-01-23 13:59:45

标签: c# .net wpf user-interface wpf-controls

我正在开发一个与Twitter互动的演示应用。我想创建一个像Twitter网站那样的控件,推文列表。

我做了以下操作,它是一个里面有多个stackpanel的列表框。如何在考虑性能的情况下创建这些控件。看看清单:

<ListBox Margin="50">
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="60"
                                       >James T. Kirk</TextBlock>
                <TextBlock FontSize="35"
                                       >Rank: Captain</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Commanding Officer</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#AAAAAA">Current action: Sleeping</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="50"
                                       >Spock</TextBlock>
                <TextBlock FontSize="30"
                                       >Rank: Commander</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Executive (First)</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#FFAAAA">Current action: Out for duty</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="40"
                                       >Leonard McCoy</TextBlock>
                <TextBlock FontSize="22"
                                       >Rank: Lt. Commander</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Chief Medical Officer</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#AAAAAA">Current action: Sleeping</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="40"
                                       >Montgomery Scott</TextBlock>
                <TextBlock FontSize="22"
                                       >Rank: Lt. Commander</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Chief Engineer</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#FFAAAA">Current action: Out for duty</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="30"
                                       >Hikaru Sulu</TextBlock>
                <TextBlock FontSize="18"
                                       >Rank: Lieutenant</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Helm Officer</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#AAAAAA">Current action: Sleeping</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="30"
                                       >Nyota Uhura</TextBlock>
                <TextBlock FontSize="18"
                                       >Rank: Lieutenant</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Communications Officer</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#AAAAAA">Current action: Sleeping</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="30"
                                       >Pavel Chekov</TextBlock>
                <TextBlock FontSize="18"
                                       >Rank: Ensign</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Navigator</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#AAAAAA">Current action: Sleeping</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="30"
                                       >Christine Chapel</TextBlock>
                <TextBlock FontSize="18"
                                       >Rank: Enlisted Nurse</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Nurse</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#AAAAAA">Current action: Sleeping</TextBlock>
            </StackPanel>
        </ListBoxItem>
        <ListBoxItem>
            <StackPanel>
                <TextBlock FontSize="30"
                                       >Janice Rand</TextBlock>
                <TextBlock FontSize="18"
                                       >Rank: Enlisted Yeoman</TextBlock>
                <TextBlock FontSize="18"
                                       >Position: Yeoman</TextBlock>
                <TextBlock FontSize="18"
                                       Foreground="#AAAAAA">Current action: Sleeping</TextBlock>
            </StackPanel>
        </ListBoxItem>
    </ListBox>

要测试它,只需创建一个WPF Windows项目,然后复制&amp;将代码粘贴到“Grid”元素元素中,然后运行。您将看到一个类似于我想要的列表框。我需要它擅长:

1)的性能 2)结合 3)交互

更新:我不是要求您查看此代码。我要求你看到它,所以你可以更好地理解我想要实现的目标

更新2:我打算发布模型,但它有点复杂。所以我发布此链接以显示我想要做的事情:

http://imgur.com/bD9jKJB

在左边我们有点击的项目,它包含文本,媒体内容,其他带有字形的按钮。

在右边我们看到列表本身,如果它比垂直尺寸大,它会在右侧显示垂直滚动。

//I would do something like this:
var tweets = await TwitterUserHelper.GetTweetsAsync();
foreach(var tweet in tweets) {
    MyListBox.Items.Add(new CustomListboxItemFromTemplate(tweet));
}

感谢。

0 个答案:

没有答案