ItemsControl WPF上的网格线样式化
本文关键字:样式 网格线 WPF ItemsControl | 更新日期: 2023-09-27 18:13:07
到目前为止,在我的日历上,边框只放置在当月需要的文本块(日期)周围。我有一个网格,有7列6行,所以有42个单元格。一个月只有最多31天(细胞),所以我有很多空细胞,周围没有边界。我怎样才能改变这一点,使所有42个单元格周围都有一个边框,使其看起来像一个日历。提前感谢。:)
<Grid Name="controlGrid" Margin="0,56,0,0">
<Grid.ColumnDefinitions >
<ColumnDefinition Width="86*" />
<ColumnDefinition Width="83*" />
<ColumnDefinition Width="84*" />
<ColumnDefinition Width="84*" />
<ColumnDefinition Width="84*" />
<ColumnDefinition Width="84*" />
<ColumnDefinition Width="84*" />
</Grid.ColumnDefinitions>
<ItemsControl ItemsSource="{Binding schedule}"
Name="Calender"
VerticalAlignment="Stretch"
Grid.ColumnSpan="7"
Margin="0,-8,0,0">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl" >
<Border BorderBrush="CornflowerBlue" BorderThickness="3">
<ItemsPresenter/>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid ShowGridLines="False" Name="gridCalender">
<Grid.Background>
<RadialGradientBrush>
<GradientStop Color="#FFC3D6F5" Offset="0" />
<GradientStop Color="#FFEFF5FF" Offset="1" />
</RadialGradientBrush>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0.5" BorderBrush="CornflowerBlue">
<TextBlock OpacityMask="Black" Name="txtBlockdays">
<Button Content="{Binding day}"
Width="175"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
VerticalContentAlignment="Top"
HorizontalContentAlignment="Left"
Name="btnCalenderDate"
Click="btnCalenderDate_Click"
Loaded="btnCalenderDate_Loaded"
Height="18"
FontSize="10"
FontWeight="Bold">
</Button>
</TextBlock>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style >
<Setter Property="Grid.Column" Value="{Binding WeekDay}" />
<Setter Property="Grid.Row" Value="{Binding WeekNo}" />
<Setter Property="Control.BorderBrush" Value="Black" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
我之前使用了这里的代码,它扩展了Grid
控件,使其包含允许您指定GridLine可见性,厚度和颜色的属性
<local:GridEx ShowCustomGridLines="True"
GridLineBrush="#FF38B800"
GridLineThickness="2">
...
</local:GridEx>
如果链接失效,代码如下:
public class GridControl : Grid
{
#region Properties
public bool ShowCustomGridLines
{
get { return (bool)GetValue(ShowCustomGridLinesProperty); }
set { SetValue(ShowCustomGridLinesProperty, value); }
}
public static readonly DependencyProperty ShowCustomGridLinesProperty =
DependencyProperty.Register("ShowCustomGridLines", typeof(bool), typeof(GridControl), new UIPropertyMetadata(false));
public Brush GridLineBrush
{
get { return (Brush)GetValue(GridLineBrushProperty); }
set { SetValue(GridLineBrushProperty, value); }
}
public static readonly DependencyProperty GridLineBrushProperty =
DependencyProperty.Register("GridLineBrush", typeof(Brush), typeof(GridControl), new UIPropertyMetadata(Brushes.Black));
public double GridLineThickness
{
get { return (double)GetValue(GridLineThicknessProperty); }
set { SetValue(GridLineThicknessProperty, value); }
}
public static readonly DependencyProperty GridLineThicknessProperty =
DependencyProperty.Register("GridLineThickness", typeof(double), typeof(GridControl), new UIPropertyMetadata(1.0));
#endregion
protected override void OnRender(DrawingContext dc)
{
if (ShowCustomGridLines)
{
foreach (var rowDefinition in RowDefinitions)
{
dc.DrawLine(new Pen(GridLineBrush, GridLineThickness), new Point(0, rowDefinition.Offset), new Point(ActualWidth, rowDefinition.Offset));
}
foreach (var columnDefinition in ColumnDefinitions)
{
dc.DrawLine(new Pen(GridLineBrush, GridLineThickness), new Point(columnDefinition.Offset, 0), new Point(columnDefinition.Offset, ActualHeight));
}
dc.DrawRectangle(Brushes.Transparent, new Pen(GridLineBrush, GridLineThickness), new Rect(0, 0, ActualWidth, ActualHeight));
}
base.OnRender(dc);
}
static GridControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(GridControl), new FrameworkPropertyMetadata(typeof(GridControl)));
}
}
只需添加额外的虚拟项来填充其他单元格…