0

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

Любые идеи? Что мне не хватает?

<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); 
      } 
     } 

    }  

} 

ответ

0

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

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

Да, Infact, что была проблема .. Я получил, что [тот же ответ на прошлой неделе на другом форуме] (http://forums.create.msdn.com/forums/t/100146 .aspx). Спасибо.. – Adarsha

Смежные вопросы