【问题标题】:WPF - Setting corner radius in code behindWPF - 在后面的代码中设置角半径
【发布时间】:2021-06-12 21:02:59
【问题描述】:

我想为我的 WPF 页面添加一些矩形,这些矩形应该有圆角。为了将一些矩形带到页面上,而不必在 xaml 中编写每一个矩形,我决定在代码中使用循环来实现。 我试过这个:

for (int i = 0; i < 5; i++)
{             
    Rectangle rect = new Rectangle();
    rect.Fill = System.Windows.Media.Brushes.Green;

    var style = new Style(typeof(Border));
    style.Setters.Add(new Setter(Border.CornerRadiusProperty, new CornerRadius(12.0, 0, 0 , 0)));
    rect.Resources.Add(typeof(Border), style);

    Grid.SetColumn(rect, 1);
    Grid.SetRow(rect, 1);
    mainGrid.Children.Add(rect);                    
}

但我的矩形的角半径不会改变。你有什么建议吗?

提前感谢您的帮助!

【问题讨论】:

  • 您可以为此目的使用styles and templates。从代码隐藏中改变任何东西都是坏主意
  • this answerthis article 应该可以帮到你
  • 感谢您的回答!刚刚注意到@Blindy 说的有'RadiusX'和'RadiusY'。这效果很好。不过我会看看 MVVM,因为我还没有。

标签: c# wpf rectangles rounded-corners cornerradius


【解决方案1】:

将一些矩形带到页面上,而不必在 xaml 中编写每个矩形

好问题要解决。

我决定用代码中的循环来做

绝对糟糕的解决方案。使用适当的 MVVM 和 &lt;ItemsControl&gt; 绑定到您尝试显示的对象列表,存储在您的视图模型中。然后创建一个全局样式表并自动或手动将其应用于此。

无论如何,要回答您的问题,您正在Border 上创建一个未命名的样式并将其应用于Rectangle。这将永远不会自动应用,这是一件好事,因为您引用了 Border.CornerRadiusProperty,它在 Rectangle 上不存在。

您想要让您的样式覆盖Rectangle 的模板并在其周围添加Border,然后设置其角边框半径,或者手动在矩形上方添加边框并在您的设置器中设置其角半径(仅将样式添加到Border 的资源中)。

不过,你的代码对我来说并没有什么意义,Rectangle 也有圆角半径属性,RadiusXRadiusY,如果你想要的话,你可以设置它们。

【讨论】:

    【解决方案2】:

    矩形溢出。如果你对边框做同样的事情,它会起作用。当您在边框内添加矩形时,您可以看到它在做什么

            Rectangle rect = new Rectangle();
            rect.Fill = System.Windows.Media.Brushes.Green;
    
            Border b = new Border();
            b.Width = 100;
            b.Height = 100;
            b.Background = Brushes.White;
            b.CornerRadius= new CornerRadius(12, 0, 0, 0);
            b.BorderThickness = new Thickness(2);
            b.BorderBrush = Brushes.Red;
            b.Child = rect;//adding this rectangle will show you how the corner is overflowing
            grid_Main.Children.Add(b);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多