ListBox не выделяет сгенерированные элементы (itemsSource), отлично работает для ListBoxItems, добавленных во время разработки - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть ListBox во всплывающем окне. Это связано с простым словарем. У меня также есть ItemContainerStyle к темам списка тем. Если я добавляю ListBoxItems во время разработки, стиль выделения работает, но тот же стиль не работает, когда я назначаю ItemsSource. Для устранения неполадок я разобрал его до костей, и проблема сохраняется. Ниже приведен код, который у меня есть, запустите его и нажмите ShowPopup, чтобы открыть Popup, сначала вы увидите элементы, добавленные во время разработки, и если вы нажмете «Добавить ItemsSource», он покажет элементы времени выполнения. Вы можете видеть выбор в элементах времени разработки, а не в элементах времени выполнения. (предметы, сгенерированные из источника предметов).

Есть идеи? Чего мне не хватает?

<phone:PhoneApplicationPage   
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"  
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"  
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
    xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"    
    x:Class="ObservableListSample.MainPage"  
    mc:Ignorable="d" d:DesignWidth="728" d:DesignHeight="480"  
    FontFamily="{StaticResource PhoneFontFamilyNormal}"  
    FontSize="{StaticResource PhoneFontSizeNormal}"  
    Foreground="{StaticResource PhoneForegroundBrush}"  
    SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"  
    shell:SystemTray.IsVisible="True"    
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit">   

    <!--LayoutRoot is the root grid where all page content is placed-->  
    <Grid x:Name="LayoutRoot" Background="Transparent">   
        <!--ContentPanel - place additional content here-->  
        <Grid x:Name="ContentPanel" Margin="12,0,12,0">   
            <controls:Pivot Margin="8" Title="pivot">   
                <controls:PivotItem Margin="12" Header="Popup">   
                    <Grid Margin="12">   
                        <Button Content="Show Popup" Margin="1,0,0,0" VerticalAlignment="Bottom" Click="Button_Click"/>   
                    </Grid>  
                </controls:PivotItem>  
            </controls:Pivot>  
            <Popup x:Name="LocPopup"  
                   Margin="12,120,12,12">   
                <StackPanel Background="{StaticResource PhoneBackgroundBrush}"  
                            Height="610"  
                            Width="432">   
                    <Button   
                               Content="Add ItemsSource"  
                                Click="Button_Click"  
                               VerticalAlignment="Top" Margin="12" />  
                    <ListBox x:Name="LibraryLocations" Height="480">   
                        <ListBox.Resources>    <DataTemplate x:Key="DataTemplate1">   
                                <ListBoxItem Content="{Binding Value}" Tag="{Binding Key.Name}"/>   
                            </DataTemplate>  
                        </ListBox.Resources>  
                        <ListBox.ItemTemplate>  
                            <StaticResource ResourceKey="DataTemplate1"/>   
                        </ListBox.ItemTemplate>  
                        <ListBoxItem Content="ListBoxItem 1" />  
                        <ListBoxItem Content="ListBoxItem 2" />  
                        <ListBoxItem Content="ListBoxItem 3" />  
                        <ListBoxItem Content="ListBoxItem 4" />  
                        <ListBoxItem Content="ListBoxItem 5" />  
                        <ListBoxItem Content="ListBoxItem 6" />  
                    </ListBox>  
                </StackPanel>  
            </Popup>  
        </Grid>  
    </Grid>  
</phone:PhoneApplicationPage>  

C #

using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Net;   
using System.Windows;   
using System.Windows.Controls;   
using System.Windows.Documents;   
using System.Windows.Input;   
using System.Windows.Media;   
using System.Windows.Media.Animation;   
using System.Windows.Shapes;   
using Microsoft.Phone.Controls;   
using System.Collections.ObjectModel;   

namespace ObservableListSample   
{   

    public partial class MainPage : PhoneApplicationPage   
    {   
         // Constructor   
        public MainPage()   
        {   
            InitializeComponent();   
        }   

        private void Button_Click(object sender, RoutedEventArgs e)   
        {   
            if (!LocPopup.IsOpen)   
                LocPopup.IsOpen = true;   
            else  
            {   
                Dictionary<string, string> items = new Dictionary<string, string>();   
                for (int i = 0; i < 20; i++)   
                {   
                    items.Add(i.ToString(), "Item " + i.ToString());   
                }   
                if (LibraryLocations.ItemsSource == null)   
                    LibraryLocations.Items.Clear();   
                LibraryLocations.ItemsSource = items;   
            }   
        }   

        protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)   
        {   
            if (LocPopup.IsOpen)   
            {   
                LocPopup.IsOpen = false;   
                e.Cancel = true;   
            }   
            else  
            {   
                base.OnBackKeyPress(e);   
            }   
        }   

    }     

}  

1 Ответ

0 голосов
/ 19 февраля 2012

Я не вижу ItemContainerStyle в вашем образце.Вам действительно нужно использовать ListBoxItem в ListBox.ItemTemplate?Попробуйте вместо этого:

<DataTemplate x:Key="DataTemplate1">
   <TextBlock Text="{Binding Value}" Tag="{Binding Key.Name}"/>
</DataTemplate>
...