Как я мог сделать это отображение для списка? - PullRequest
0 голосов
/ 23 марта 2010

У меня есть список данных с привязкой к данным, который фактически отображает два столбца данных.Он отображается следующим образом:

<UserControl.Resources>
        <DataTemplate x:Key="AlignedPairs">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Fruits}" Grid.Column="0" />
                <TextBlock Text="->" TextAlignment="Center" Grid.Column="1" />
                <TextBlock Text="{Binding Colors}" Grid.Column="3" />
            </Grid>
        </DataTemplate>
    </UserControl.Resources>

            <ListBox Name="lbStuff" Grid.ColumnSpan="2"  Grid.Row="1"
                     ItemTemplate="{StaticResource AlignedPairs}">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>

Затем в исходном коде задан Itemsource.

Однако, основываясь на некоторой логике, я бы хотел установить строку или элемент в одном из столбцов,например, фрукт к красному, или линия к жирному шрифту.У меня есть код, чтобы определить, какой фрукт или цвет я бы хотел различить (по цвету / полужирному шрифту) в коде, но я не могу понять, особенно с учетом настраиваемого отображения списка, как я могу настроить конкретный элементна другой цвет / полужирный.

У кого-нибудь есть идеи?

Дайте мне знать, требуется ли какой-либо дополнительный код.Приветствия.

edit: все, что я действительно хочу сделать, это сделать проблему как можно проще ... пройтись по каждому элементу в списке и проверить строку, еслиесть совпадение НЕКОТОРЫЕ визуально различают этот элемент в списке / просмотре списка.Нет необходимости делать это более сложным, чем нужно.Почему вы не можете индивидуально установить цвет переднего плана предметов, вне меня!

edit 2:

Похоже, я почти добился следующего (но этовыдает исключение и не работает)

            foreach (var li in ListView.Items)
            {

                if (someCriteria == true) 
                {
                      ((ListViewItem) li).Foreground = Brushes.Red; 
//exception throw as this is the actual object stored in this location (the Fruit object for example) not the row or listviewitem I want to change the color of so it can't be cast :(
                }
            }

Ответы [ 2 ]

1 голос
/ 23 марта 2010

Вот где действительно помогает шаблон проектирования ViewModel.

Предположительно, у вас есть класс, который предоставляет свойства Fruit и Color. Создайте класс-оболочку, который предоставляет оба этих свойства, а также, скажем, FruitBackgroundBrush и ItemBackgroundBrush. Затем вы можете просто привязать эти свойства в своем шаблоне, например:

<DataTemplate x:Key="AlignedPairs">
    <Grid Background={Binding ItemBackgroundBrush}>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBlock Text="{Binding Fruits}" 
                   Background="{Binding FruitBackgroundBrush}" 
                   Grid.Column="0" />
        <TextBlock Text="->" TextAlignment="Center" Grid.Column="1" />
        <TextBlock Text="{Binding Colors}" Grid.Column="3" />
    </Grid>
</DataTemplate>
0 голосов
/ 23 марта 2010

DataTriggers позаботятся об этом. Вот хороший пример: http://en.csharp -online.net / WPF_Styles_and_Control_Templates% E2% 80% 94Data_Triggers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...