Какой элемент управления wpf наиболее подходит для отображения набора слов в виде текста? - PullRequest
1 голос
/ 18 января 2012

Я хочу показать большой набор слов , в виде текста (не в виде таблицы или списка), что каждое слово имеет набор дополнительных свойств как word_id и word_type.

так какой же самый подходящий для этого WPF элемент управления?
Соответствующие средства означают подходящую производительность , возможности связывания и все, что нужно для работы со словом и текстом.

  • ListView
  • FlowDocument
  • DocumentView
  • WebBrowser + javascript
  • TextBlock + Run

или что-то еще?

1 Ответ

1 голос
/ 18 января 2012

Я бы использовал WrapPanel / пользовательский VirtualizingWrapPanel для отображения элементов и Converters / Triggers / VisualStateManager для управления внешним видом - с учетом ваших функциональных требований.

Вот мое мнение:

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;

namespace GridA
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Loaded += (o, e) => 
            {
                this.i.ItemsSource = "I am a penel which displays words as seperate items. Feel free to resize myself.".Split(" ".ToCharArray());
            };
        }
    }
}

Markup:

<Window x:Class="GridA.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid TextBlock.FontSize="20">
        <ItemsControl x:Name="i">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Label Margin="3" BorderBrush="Gray" BorderThickness="2" Content="{Binding}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...