#c# #wpf
Вопрос:
Я создаю знаменитую игру в слова, Жаргон. И чтобы читать его лучше, я добавил эффект тени. При создании эффекта добавляется тень. Он виден в начале, но исчезает после того, как содержимое было изменено на буквы
public DropShadowEffect drop = new DropShadowEffect
{
Color = new Color { A = 0, R = 0, G = 0, B = 0 },
Direction = 315,
ShadowDepth = 5,
Opacity = 1,
BlurRadius = 5
};
public void DrawTextblocks(WrapPanel Word_canvas)
{
for (int j = 0; j < 10; j )
{
for (int i = 0; i < letter_lenth; i )
{
Border Background = new Border
{
Background = Brushes.DarkBlue,
Width = size,
Height = 118,
Margin = new Thickness(0),
BorderBrush = Brushes.DarkGray,
BorderThickness = new Thickness(1, 1, 1, 1),
};
Label Label = new Label
{
Height = 118,
Width = size,
FontSize = font_size_letter,
Effect = drop,
Background = Brushes.Transparent,
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center,
Foreground = Brushes.White,
Content = ".",
Margin = new Thickness(0),
};
Letter_backgrounds[j, i] = Background;
Background.Child = Label;
Word_canvas.Children.Add(Background);
Canvas.SetLeft(Label, i * 118);
Canvas.SetTop(Label, j * 118);
Letter_labels[j, i] = Label;
}
}
}
Самое странное, что я создаю таким же образом числа, но там эффект тени НЕ исчезает. Даже после того, как я сделаю передний план прозрачным, а заднюю часть белой после Жаргона. (смотрите gif для лучшей идеи)
public void DrawBalls_F(UniformGrid Ball_canvas_F)
{
for (int j = 0; j < 5; j )
{
for (int i = 0; i < 5; i )
{
lost_numbers_f = lost_numbers_pattern_F1;
Border Ball_border = new Border
{
BorderThickness = new Thickness(5),
BorderBrush = new SolidColorBrush(Colors.Transparent),
Background = new SolidColorBrush(Colors.DarkBlue),
CornerRadius = new CornerRadius(100),
Width = 118,
Height = 118
};
Label Ball_label = new Label
{
Width = 118,
Height = 118,
Effect = drop,
Content = board_f2[j, i],
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center,
FontSize = font_size_ball,
Foreground = new SolidColorBrush(Colors.White),
Background = new SolidColorBrush(Colors.Transparent),
};
Ball_canvas_F.Children.Add(Ball_border);
Canvas.SetLeft(Ball_label, i * size);
Canvas.SetTop(Ball_label, j * size);
Ball_F_L[j, i] = Ball_label;
Ball_F_B[j, i] = Ball_border;
}
}
}
}
В чем причина того, что тень остается на цифрах, но не на буквах?
Комментарии:
1. Совет: Не знаю ответа, потому что я знаю, как применять стили только в XAML. Но я предлагаю использовать
TextBlock
вместоLabel
, потомуLabel
что он не предназначен для отображения текста в WPF, он немного медленнее по производительности, чемTextBlock
. Используйте XAML и стили, это проще, чем бороться с элементами управления в C#.2. @aepot хорошо, это имеет смысл. Переключил его на «Текстовый блок» и должен был изменить содержимое на тексты. Но все равно эффект исчезает.
3. Похоже, что он работает до изменения текста imgur.com/a/e9eXwrc