При попытке изменить фон TextBlock, который является частью DataTemplate объекта ListBox, фон только вокруг текста, а не весь блок
В UWP TextBlock не имеет свойства фона, поэтому яобернул его в рамку и изменил фон границы следующим образом:
<ListBox x:Name="BitsListView" ItemsSource="{x:Bind BitsList, Mode=TwoWay}" Loaded="BitsListView_Loaded"
HorizontalAlignment="Left" IsEnabled="{x:Bind IsWriteAccess,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="BitsListView_SelectionChanged " SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="BitText" Text="{Binding}" Loaded="BitText_Loaded" />
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
И цвет изменяется в событии OnLoaded следующим образом:
private void BitText_Loaded(object sender, RoutedEventArgs e)
{
TextBlock bitText = sender as TextBlock;
StackPanel sp = bitText.Parent as StackPanel;
Border border = sp.Parent as Border;
if ((int)bitText.DataContext == 1)
{
bitText.Foreground = new SolidColorBrush(Windows.UI.Colors.LightGreen);
border.Background = new SolidColorBrush(Windows.UI.Colors.DarkGreen);
}
else
{
bitText.Foreground = new SolidColorBrush(Windows.UI.Colors.Gray);
border.Background = new SolidColorBrush(Windows.UI.Colors.LightGray);
}
}
Но результат таков: https://pasteboard.co/IlcZB1J.png
То, что я пытаюсь достичь, выглядит примерно так: (Не обращайте внимания на плохую работу MSPaint)
https://pasteboard.co/Ild1plp.png
То, что я пробовалЧтобы решить эту проблему, нужно обернуть панель стека границей, но это не помогло.Затем я попытался обернуть таблицу данных, но это невозможно, так как лазание дальше вверх по дереву с изменением фона не работает должным образом, и, очевидно, изменение фона ListBox рисует весь список, и мне нужны только блоки с 1, чтобы бытьнарисован полностью, а не только вокруг текста