Intenté usar DropShadowEffect pero su fuerza de "brillo" se debilita cuando aumentas BlurRadius. Quiero tener un fuerte brillo exterior como la imagen de abajo.
Si apilo el mismo efecto una docena de veces, puedo obtener esto, pero el rendimiento se estanca después de esto. ¿Es posible hacerlo usando WPF con un solo efecto?
Dependiendo de qué tan grande desee que sea el radio del desenfoque y qué tan suave debe ser el resultado, puede apilar diferentes efectos como paradas de degradado en lugar de apilar repetidamente el mismo efecto.
Como usted señaló, la fuerza de DropShadowEffect se debilita a medida que aumenta BlurRadius .
<TextBox Text="DropShadowEffect"> <TextBox.Effect> <DropShadowEffect BlurRadius="50" ShadowDepth="0" Color="Blue" Opacity="1"/> </TextBox.Effect> </TextBox> Además, la aplicación de efectos directamente al cuadro de TextBox afecta la calidad de representación del texto . La solución propuesta para la pregunta vinculada (establecer TextOptions.TextFormattingMode="Display" en la Window ) también tiene implicaciones de diseño. En su lugar, puede dibujar un Rectangle con un BlurEffect detrás de su elemento.
<Rectangle Fill="Blue" Height={Binding ElementName=MyTextBox, Path=ActualHeight}" Width={Binding ElementName=MyTextBox, Path=ActualWidth}"> <Rectangle.Effect> <BlurEffect Radius="50"/> </Rectangle.Effect> </Rectangle> <TextBox x:Name="MyTextBox" Text="Rectangle with BlurEffect"/> Luego puede agregar un Rectangle adicional para cada parada de degradado. Aquí hay dos: uno en 50 para definir el tamaño general del desenfoque y otro en 30 para fortalecer el brillo alrededor del control.
<Rectangle Fill="Blue" Height={Binding ElementName=MyTextBox, Path=ActualHeight}" Width={Binding ElementName=MyTextBox, Path=ActualWidth}"> <Rectangle.Effect> <BlurEffect Radius="50"/> </Rectangle.Effect> </Rectangle> <Rectangle Fill="Blue" Height={Binding ElementName=MyTextBox, Path=ActualHeight}" Width={Binding ElementName=MyTextBox, Path=ActualWidth}"> <Rectangle.Effect> <BlurEffect Radius="30"/> </Rectangle.Effect> </Rectangle> <TextBox x:Name="MyTextBox" Text="Two Rectangles with BlurEffect"/> Preguntaste sobre la nitidez percibida en las esquinas del cuadro de TextBox y debo admitir que no tengo una buena solución. Inicialmente consideré redondear las esquinas de los elementos borrosos detrás de su control usando un Border en lugar de un Rectangle , pero honestamente no veo mucha diferencia.
<!-- Remove the CornerRadius property for square corners. --> <Border CornerRadius="10" Background="Blue"> <Border.Effect> <BlurEffect Radius="50"/> </Border.Effect> </Border> <Border CornerRadius="10" Background="Blue"> <Border.Effect> <BlurEffect Radius="30"/> </Border.Effect> </Border> Por supuesto, siempre puede hacer que los objetos de fondo sean más grandes que su control. Aquí están en la misma celda de una Grid , pero hay espacio adicional para que Border el borde porque el TextBox de texto tiene un Margin . Un margen superior/inferior más pequeño y un margen izquierdo/derecho más grande significa que el brillo será más uniforme alrededor del control.
<!-- These items should be in the same cell of a Grid --> <Border CornerRadius="10" Background="Blue"> <Border.Effect> <BlurEffect Radius="50"/> </Border.Effect> </Border> <Border CornerRadius="10" Background="Blue"> <Border.Effect> <BlurEffect Radius="30"/> </Border.Effect> </Border> <TextBox Text="TextBox has an 8px, 4px margin" Margin="8 4"/>