Как изменить фон текстового блока в событии в UWP - PullRequest
1 голос
/ 26 июня 2019

В отличие от WPF, TextBlock не имеет свойства фона. Я видел, что для обхода этой проблемы можно заключить текстовый блок в рамку и изменить фон рамки.

Теперь я хочу изменить фон рамки в событии, которое запускается при загрузке текстового блока.

проверка свойства Parent сработавшего текстового блока. Я вижу, что он имеет только ссылку на панель стека, но не на границу. Как изменить фон границ в функции события?

неработающий код, который я пробовал, это:

    private void BitText_Loaded(object sender, RoutedEventArgs e)
    {
        TextBlock bitText = sender as TextBlock;
        Border border = bitText.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);
        }
    }

Код XAML:

                                         <ListBox.ItemTemplate>
                                                <DataTemplate>
                                                    <Border Background="Gray">
                                                        <StackPanel Orientation="Horizontal">
                                                            <TextBlock x:Name="BitText" Text="{Binding}" Loaded="BitText_Loaded"/>
                                                        </StackPanel>
                                                    </Border>
                                                </DataTemplate>
                                            </ListBox.ItemTemplate>

1 Ответ

0 голосов
/ 26 июня 2019

Приведите bitText.Parent к StackPanel, а затем приведите Parent из StackPanel к Border:

private void BitText_Loaded(object sender, RoutedEventArgs e)
{
    TextBlock bitText = sender as TextBlock;
    StackPanel stackPanel = bitText.Parent as StackPanel;
    Border border = stackPanel.Parent as Border;
    //...
}
...