невозможно выбрать элемент списка через шаблон данных в WPF - PullRequest
0 голосов
/ 02 сентября 2011

Я не могу выбрать нужный элемент из списка (когда я нажимаю на любой элемент в этом списке, выбираются более одного элемента, но не тот, на котором я щелкнул).Также цвет фона выбранных элементов меняется на цвет по умолчанию (белый).Код Xaml, используемый мной, выглядит следующим образом:

<ListBox x:Uid="lst_value" Name="lstValues" Background="Wheat"
    BorderBrush="Black" HorizontalAlignment="Left" VerticalAlignment="Top"
    BorderThickness="1" Height="100" Width="150" ItemsSource="{Binding listval}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" Background="Wheat">
                <TextBlock x:Name="txtblk" Foreground="Black" FontSize="10"
                    TextAlignment="Left" FontWeight="Black" Text="{Binding}"
                    Background="Wheat"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Может кто-нибудь сообщить мне, как решить проблему, пожалуйста.

Ответы [ 4 ]

3 голосов
/ 02 сентября 2011

Не следует устанавливать Background на StackPanel и TextBlock, которые скрывают выбор.Чтобы переопределить фон для выделения, добавьте ресурсы в свои ListBoxItems.

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Style.Resources>
            <!-- Selected Brush -->
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
            <!-- Selected but out of focus Brush -->
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightGreen" />
        </Style.Resources>
        <!-- If you must set a Background, do it here, should be superfluous though as the ListBox.Background is the same -->
        <Setter Property="Background" Value="Wheat" />
    </Style>
</ListBox.ItemContainerStyle>

Может возникнуть проблема выбора, если у вас есть исходная коллекция с идентичными объектами (например, строки с одинаковым значением).

1 голос
/ 02 сентября 2011

Если я правильно понимаю вашу проблему, то логика выбора списка реагирует странно. Правильно?

В большинстве случаев такое поведение связано с Equals () или / и методом GetHashCode () ваших элементов (объектов в вашем перечислении listVal). Убедитесь, что в вашем списке нет нескольких объектов, которые возвращают true для вызова Equals () одного объекта. Также убедитесь, что у вас нет объектов, которые возвращают изменяющиеся значения для GetHashCode () (некоторые случайные значения).

Если вы обнаружили проблему в описанных выше методах (я полагаю, равно), но вы должны сказать, что не можете изменить реализацию Equals (), рассмотрите возможность создания объекта-оболочки для ваших элементов (ViewModel).

0 голосов
/ 16 мая 2017

В моем случае я ошибочно добавлял ComboBoxItems в коллекцию ListBox.Items.Добавление объектов, отличных от « ListBoxItem », в коллекцию «Предметы» вызвало у меня такое поведение.

0 голосов
/ 02 сентября 2011

Если я не ошибаюсь, listval - это List<string> или любой другой список примитивных типов. Причина, по которой он ведет себя в вашем случае, заключается в том, что примитивные типы являются struct, а не классами.

вместо использования списка примитивных типов попробуйте использовать конкретный класс

Допустим, вы используете список имен, таких как List ..

Создайте класс, имеющий свойство name

class person
{
public string Name{get;set;} 
}

используйте список, и вы можете связать имя свойства

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