Szukam 1), co się dzieje, i 2) jak rozwiązać problem.Windows Phone ListBox Element Zmiana koloru tła, chociaż jest ustawiony wyraźnie
Issue
Jeżeli wysokość ListBox Pozycja jest ponad 2521, wydaje się, aby zmienić tło na czarno nawet gdy tło jest jawnie ustawiony na coś innego.
sposób odtworzenia
Weźmy przykładowy plik XAML mam poniżej, aw swoim xaml.cs pliku dodaj następujące:
DataContext = new List<int>() { 1 };
zmienić wysokość TextBlock do 2522 lub wyższy .
Przykładowy kod nie jest tam, gdzie napotkałem problem, jednak jest to prosty przykład do zademonstrowania błędu. Ja nie planuje posiadania TextBlock, który jest 2522+ w rozmiarze :)
pliku XAML Próbka
<Grid x:Name="LayoutRoot" Background="Brown">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<phone:Pivot x:Name="pivot" Title="{Binding name}" Grid.Row="1" Foreground="White" Margin="10,0,0,0">
<phone:PivotItem x:Name="mainPivot" Header="menu" Margin="0,0,20,0">
<ListBox ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="White">
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock Height="2521" Text="some data" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" FontSize="22" Foreground="Purple"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</phone:PivotItem>
</phone:Pivot>
</Grid>
</phone:PhoneApplicationPage>
Uwagi
Kilka osób wyraziło obawy dotyczące mój interfejs. Powyższy kod to próbka, a nie mój rzeczywisty interfejs użytkownika. Nie ma problemów z wydajnością, a ListBox nie jest powolny. Wszystko działa zgodnie z oczekiwaniami, z wyjątkiem zmiany koloru tła.
Nie stara się być obraźliwe, ale mam wrażenie, że nie bardzo rozumiem listboxes i DataTemplates, chyba że naprawdę chcesz * * ListBoxItem każdy zawiera ponad 100 TextBlocks, w takim przypadku zalecana przemyśleć, jak wizualizujesz dane. Nie zdziwiłbym się, gdy dowiedziałem się, że przekroczyłeś pewien limit implementacji, dodając wiele UIElements do DataTemplate. Windows Phone 7 miał ograniczenie, że każdy UIElement mógł wynosić co najwyżej 2048 (lub pewną liczbę zbliżoną do tego) pikseli, może to być coś podobnego. Radzę ci zajrzeć do ListBoxes i jak je wypełnić. – Praetorian
Mam bardzo skomplikowany interfejs użytkownika, który oddałem do tego prostego przykładu ze względu na zwięzłość. Początkowo myślałem, że to dlatego, że mój interfejs ma dużo głębi (w XAML), ale okazuje się, że może to być liczba elementów; a może jak już wspomniałeś o ograniczeniu wysokości.Zrobię kilka eksperymentów, aby sprawdzić, czy wzrost jest winowajcą. – Coltin
Zmodyfikuję moje pytanie, aby wyjaśnić, że przykładowy kod demon pokazuje błąd w prosty sposób i że w ogóle nie odzwierciedla mojego prawdziwego kodu. – Coltin