J'ai un ListViewItem
que j'applique un Style
et j'aimerais mettre une ligne grise en pointillés en bas de l'écran. Border
.
Comment puis-je faire cela dans WPF ? Je ne vois que des brosses de couleur unie.
J'ai un ListViewItem
que j'applique un Style
et j'aimerais mettre une ligne grise en pointillés en bas de l'écran. Border
.
Comment puis-je faire cela dans WPF ? Je ne vois que des brosses de couleur unie.
Cela a très bien fonctionné dans notre application, nous permettant d'utiliser une vraie bordure et de ne pas nous embêter avec des rectangles :
<Border BorderThickness="1,0,1,1">
<Border.BorderBrush>
<DrawingBrush Viewport="0,0,8,8" ViewportUnits="Absolute" TileMode="Tile">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="Black">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,50,50" />
<RectangleGeometry Rect="50,50,50,50" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Border.BorderBrush>
<TextBlock Text="Content Goes Here!" Margin="5"/>
</Border>
Notez que la fenêtre d'affichage détermine la taille des tirets dans les lignes. Dans ce cas, elle génère des tirets de huit pixels. Viewport="0,0,4,4" vous donnerait des tirets de quatre pixels.
Vous pouvez définir un style qui inclut le DrawingBrush, puis appliquer ce style aux éléments que vous souhaitez.
Les deux rectangles sont en fait alignés de telle sorte que ce motif fonctionne tout autour de la frontière, horizontalement et verticalement, à gauche et à droite. (Il vaut mieux ne pas essayer de l'utiliser pour des lignes non-rectangulaires cependant...)
Vous pouvez créer une ligne en pointillés ou en tirets en utilisant un rectangle comme dans le code ci-dessous
<Rectangle Stroke="#FF000000" Height="1" StrokeThickness="1" StrokeDashArray="4 4"
SnapsToDevicePixels="True"/>
Commencez par cela et personnalisez votre listview en fonction de votre scénario.
J'arrive un peu tard, mais la solution suivante a fonctionné pour moi. Elle est légèrement plus simple/meilleure que les deux autres solutions :
<Border BorderThickness="1">
<Border.BorderBrush>
<VisualBrush>
<VisualBrush.Visual>
<Rectangle StrokeDashArray="4 2" Stroke="Gray" StrokeThickness="1"
Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualWidth}"
Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualHeight}"/>
</VisualBrush.Visual>
</VisualBrush>
</Border.BorderBrush>
<TextBlock Text="Whatever" />
</Border>
Xaml
<Grid>
<Grid.RowDefinitions><RowDefinition Height="auto"/></Grid.RowDefinitions>
<Grid.ColumnDefinitions><ColumnDefinition Width="auto"/></Grid.ColumnDefinitions>
<Rectangle RadiusX="9" RadiusY="9" Fill="White" Stroke="Black" StrokeDashArray="1,2"/>
<TextBlock Padding = "4,2" Text="Whatever"/>
</Grid>
Travail sur un contrôle d'utilisateur.... J'ai essayé un storyboard pour une bordure de fourmis marchantes. La grille de base avec un rectangle et du texte fonctionne bien puisqu'il n'y a pas d'interaction. Lorsque j'essaie de placer un bouton à l'intérieur de la grille, soit le rectangle, soit le bouton est visible, mais jamais les deux.
D'un autre poste : Effets d'animation XAML avancés. Impulsion, fourmis marchantes, rotations. Alertes
L'utilisation de la solution de dotNet pour le VisualBrush a déplacé le rectangle vers la bordure avec un bouton à l'intérieur. Cela a parfaitement fonctionné.
<UserControl.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type TextBlock}" x:Key="LOC_DG_Cell_Mid" BasedOn="{StaticResource DG_TextBlock_Mid}" >
<Setter Property="Margin" Value="5 0"/>
</Style>
<Storyboard x:Key="MarchingAnts">
<DoubleAnimation BeginTime="00:00:00"
Storyboard.TargetName="AlertBox"
Storyboard.TargetProperty="StrokeThickness"
To="4"
Duration="0:0:0.25" />
<!-- If you want to run counter-clockwise, just swap the 'From' and 'To' values. -->
<DoubleAnimation BeginTime="00:00:00" RepeatBehavior="Forever" Storyboard.TargetName="AlertBox" Storyboard.TargetProperty="StrokeDashOffset"
Duration="0:3:0" From="1000" To="0"/>
</Storyboard>
</ResourceDictionary>
</UserControl.Resources>
<UserControl.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource MarchingAnts}"/>
</EventTrigger>
</UserControl.Triggers>
<Grid>
<Border BorderThickness="1">
<Border.BorderBrush>
<VisualBrush>
<VisualBrush.Visual>
<Rectangle x:Name="AlertBox" Stroke="Red" StrokeDashOffset="2" StrokeDashArray="5" Margin="5"
Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualWidth}"
Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualHeight}"/>
</VisualBrush.Visual>
</VisualBrush>
</Border.BorderBrush>
<Button x:Name="FinishedButton" Padding="0 5" Margin="0" Style="{StaticResource IconButton}" >
<StackPanel Orientation="Horizontal" >
<Label Style="{StaticResource ButtonLabel}" Content="Processing has Finished" />
</StackPanel>
</Button>
</Border>
</Grid>
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Avez-vous vérifié ceci stackoverflow.com/questions/1630022/
1 votes
Non - Merci pour ça. Vous ne connaissez pas de simple de la manière dont vous le faites ? Ça ressemble à un piratage.
0 votes
Article connexe, et probablement la meilleure réponse stackoverflow.com/questions/14936002/