C# WPF Border és Rectangle elmosodik

C# WPF Border és Rectangle elmosodik
2013-09-12T13:00:05+02:00
2013-09-13T15:40:25+02:00
2022-11-29T17:41:53+01:00
Peti_22
Üdv,

Volna egy olyan problémám, hogy jelenleg egy sok Borderből és egy TextBoxból álló kontroll elemem néha ablak átméretezésnél elmosódott szélekkel jelenik meg.

Keresgélve a netten arra jutottam, hogy elég betenni egy Canvasba és megadni neki a kanvas 2 pontjától pl.: Top és Left -től való távolságát.

sajnos ez nem segített és bár a teljes méretű ablak betöltésekor a kontroll elemek éles vonallal jelenek meg mikor megragadom az ablak szélét és méretezgetem akkor néha elmosódik a széle és 1 pixel helyet 2-3 pixeles vonal látszódik ami nem túl szép.

XAML:

<Window x:Class="Teszt.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Ablak" Height="550" Width="750" xmlns:local="clr-namespace:Teszt" WindowState="Maximized" WindowStartupLocation="CenterScreen"> <Grid Name="grid_Parent" Background="#FF36383B"> <Grid.RowDefinitions> <RowDefinition Height="25"/> <RowDefinition Height="50"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> <Canvas Height="30" Width="210" Grid.Row="2"> <local:ClippingBorder Canvas.Top="1" Canvas.Left="1" VerticalAlignment="Top" HorizontalAlignment="Stretch" x:Name="TopShadowClippingBorder" BorderThickness="0" CornerRadius="3" ClipToBounds="True"> <Border Height="25" Width="200" x:Name="TopShadowBorder" BorderBrush="Black" BorderThickness="1,1,0,0" Padding="0" CornerRadius="3" ClipToBounds="True"> <Border.Effect> <DropShadowEffect Direction="360" ShadowDepth="1" BlurRadius="6" /> </Border.Effect> </Border> </local:ClippingBorder> <Border Canvas.Top="1" Canvas.Left="1" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="25" Width="200" BorderBrush="Black" BorderThickness="1,1,1,2" CornerRadius="3" /> <Border Canvas.Top="1" Canvas.Left="1" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="25" Width="200" x:Name="InsetBorder" BorderThickness="0,0,0,1" CornerRadius="3" > <Border.BorderBrush> <SolidColorBrush Color="White" Opacity="0.28"/> </Border.BorderBrush> </Border> <StackPanel Canvas.Top="1" Canvas.Left="1" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="25" Width="200" x:Name="Contents_StackPanel" Margin="0"> <TextBox Canvas.Top="1" Canvas.Left="1" VerticalAlignment="Top" HorizontalAlignment="Stretch" Text="TextBox" Height="25" Width="200" Background="#19000000" BorderBrush="#00ABADB3" FontStyle="Italic" FontSize="14" FontWeight="Light" > <TextBox.Foreground> <SolidColorBrush Color="#99FFFFFF" Opacity="0.6"/> </TextBox.Foreground> </TextBox> </StackPanel> </Canvas> </Grid> </Window>

C#:

namespace Teszt { public class ClippingBorder : Border { protected override void OnRender(DrawingContext dc) { OnApplyChildClip(); base.OnRender(dc); } public override UIElement Child { get { return base.Child; } set { if (this.Child != value) { if (this.Child != null) { // Restore original clipping this.Child.SetValue(UIElement.ClipProperty, _oldClip); } if (value != null) { _oldClip = value.ReadLocalValue(UIElement.ClipProperty); } else { // If we dont set it to null we could leak a Geometry object _oldClip = null; } base.Child = value; } } } protected virtual void OnApplyChildClip() { UIElement child = this.Child; if (child != null) { _clipRect.RadiusX = _clipRect.RadiusY = Math.Max(0.0, this.CornerRadius.TopLeft - (this.BorderThickness.Left * 0.5)); _clipRect.Rect = new Rect(Child.RenderSize); child.Clip = _clipRect; } } private RectangleGeometry _clipRect = new RectangleGeometry(); private object _oldClip; } }

Szóval fent látható a kód egy képernyőn 8-10 ilyen TextBox lenne és egyéb kontroll elemek. Több féle képen próbálkoztam már, de nem sikerült megoldanom, hogy nem mosódjon el a Border széle.
Mutasd a teljes hozzászólást!
Már rájöttem a megoldásra bár 2 napomba került :S


<Grid UseLayoutRounding="True"> ... </Grid>

ha bekapcsolom a(z)
UseLayoutRounding
-et akkor szép éllel jelenik meg a Border is.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd