я использовал visualbrush на borderbrush для установки разного цвета для каждого направления границы.
<Border Grid.Row="0" Grid.Column="4" BorderThickness="10,10,5,5" CornerRadius="0" HorizontalAlignment="Right" Height="50" Width="50" VerticalAlignment="Bottom" >
<Border.BorderBrush>
<VisualBrush>
<VisualBrush.Visual>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="10"/>
<RowDefinition Height="30"/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<Border Background="Blue" Grid.Row="1" Grid.Column="0"/>
<Border Background="Red" Grid.Row="1" Grid.Column="2"/>
<Border Background="Green" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"/>
<Border Background="Yellow" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3"/>
</Grid>
</VisualBrush.Visual>
</VisualBrush>
</Border.BorderBrush>
</Border>
на xaml, этот код хорошо работал.цвет каждого направления границы различен.но для кода позади,
Grid grid = new Grid();
grid.Height = this.rowHeight[r] + topHeight + bottomHeight;
grid.Width = this.columnWidth[c] + leftWidth + rightWidth;
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(topHeight) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(rowHeight[r])});
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(bottomHeight) });
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(leftWidth) });
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(columnWidth[c])});
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(rightWidth) });
Border bdTop = new Border() { Background = new SolidColorBrush(cellInfo["BorderBrush"]["Top"]) };
Border bdBottom = new Border() { Background = new SolidColorBrush(cellInfo["BorderBrush"]["Bottom"]) };
Border bdLeft = new Border() { Background = new SolidColorBrush(cellInfo["BorderBrush"]["Left"]) };
Border bdRight = new Border() { Background = new SolidColorBrush(cellInfo["BorderBrush"]["Right"]) };
bdTop.Height = topHeight;
bdBottom.Height = bottomHeight;
bdLeft.Height = this.rowHeight[r];
bdRight.Height = this.rowHeight[r];
grid.Children.Add(bdTop);
grid.Children.Add(bdBottom);
grid.Children.Add(bdLeft);
grid.Children.Add(bdRight);
Grid.SetRow(bdTop, 0);
Grid.SetColumn(bdTop, 0);
Grid.SetColumnSpan(bdTop, 3);
Grid.SetRow(bdBottom, 2);
Grid.SetColumn(bdBottom, 0);
Grid.SetColumnSpan(bdBottom, 3);
Grid.SetRow(bdLeft, 1);
Grid.SetColumn(bdLeft, 0);
Grid.SetRow(bdRight, 1);
Grid.SetColumn(bdRight, 2);
VisualBrush vb = new VisualBrush();
vb.Visual = grid;
, если вся толщина не одинакова, для кода позади, каждое направление границы использует каждую визуальную кисть.верхняя граница показала всю визуальную кисть.В нижней части рамки отображалась вся визуальная кисть.
Я не знаю, в чем проблема ....
XAML-код, используемый в пользовательском интерфейсе границы.за кодом, используемым в границе табличной ячейки.