Как установить цвет границы кисти для каждого направления границы на разной толщине? - PullRequest
0 голосов
/ 20 февраля 2019

я использовал 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-код, используемый в пользовательском интерфейсе границы.за кодом, используемым в границе табличной ячейки.

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы хотите, чтобы рамка имела 4 разных цвета, вы можете наложить их друг на друга, что намного проще реализовать:

    <Grid Height="50" Width="50">
        <Border BorderBrush="Blue" BorderThickness="5,0,0,0"></Border>
        <Border BorderBrush="Red" BorderThickness="0,0,5,0"></Border>
        <Border BorderBrush="Yellow" BorderThickness="0,0,0,5"></Border>
        <Border BorderBrush="Green" BorderThickness="0,5,0,0"></Border>
        <Grid Margin="5">
           <!-- Content here -->
        </Grid>
    </Grid>

enter image description here

...