首页 > 解决方案 > 设置动态生成的 WPF 画布的背景颜色?

问题描述

我在 a 中有一个动态创建的WPF Canvas元素ContentControl(同样的事情发生在 a 中UserControl。)每当我尝试设置背景时,无论是在创建时还是稍后在程序中,背景颜色都不会绘制(但是我可以设置Label内部的背景Canvas(也动态添加。)我的创建代码如下所示:

_rootGrid = new Grid();
_rootGrid.Name = "_rootGrid";
_rootGrid.Margin = new Thickness(0);
_rootGrid.HorizontalAlignment = HorizontalAlignment.Stretch;
_rootGrid.VerticalAlignment = VerticalAlignment.Stretch;
_rootGrid.RowDefinitions.Add(new RowDefinition());
_rootGrid.RowDefinitions.Add(new RowDefinition());
_rootGrid.ColumnDefinitions.Add(new ColumnDefinition());
_rootGrid.RowDefinitions[0].Height = new GridLength(24);
_rootGrid.RowDefinitions[1].Height = new GridLength(0, GridUnitType.Star);
_rootGrid.ColumnDefinitions[0].Width = new GridLength(0, GridUnitType.Star);

_headerBlock = new Canvas();
_headerBlock.Name = "_headerBlock";
_headerBlock.SetValue(Grid.RowProperty, 0);
_headerBlock.SetValue(Grid.ColumnProperty, 0);
_headerBlock.PreviewMouseLeftButtonUp += _headerBlock_PreviewMouseLeftButtonUp;
_headerBlock.Background = Brushes.Red;

_title = new Label();
_title.Name = "_title";
_title.Content = "Title";
_title.VerticalAlignment = VerticalAlignment.Center;
_title.HorizontalAlignment = HorizontalAlignment.Left;
_title.FontWeight = FontWeights.Bold;
_title.Background = Brushes.Blue;

_clientBlock = new ScrollViewer();
_clientBlock.Name = "_clientBlock";
_clientBlock.Margin = new Thickness(0);
_clientBlock.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
_clientBlock.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
_clientBlock.SetValue(Grid.RowProperty, 1);
_clientBlock.SetValue(Grid.ColumnProperty, 0);

_clientArea = new Grid();
_clientArea.Name = "_clientArea";
_clientArea.HorizontalAlignment = HorizontalAlignment.Stretch;
_clientArea.VerticalAlignment = VerticalAlignment.Stretch;

_headerBlock.Children.Add(_title);
_rootGrid.Children.Add(_headerBlock);
_clientBlock.Content = _clientArea;
_rootGrid.Children.Add(_clientBlock);
base.Content = _rootGrid;

ContentControl并在构造函数内部调用。从那我希望标题包含一整行,文本周围Red有一个Blue矩形,但我得到的只是Blue文本周围的矩形,大部分行都在左边Transparent(由于Greenroot 的背景而明显Grid。)对此有任何帮助将不胜感激,因为它非常令人沮丧。我正在使用框架的版本6.2,如果它起作用(我注意到了一些其他奇怪的行为,但主要是因为这些s 需要很多子元素并且解析器太破碎而无法命名它们- 这使它们几乎毫无用处。).NETWindows 7ContentControlVS 2017 XAML

标签: c#wpfxamlwpf-controls

解决方案


解决方案是对 ColumnDefinition 使用非零宽度:

_rootGrid.ColumnDefinitions[0].Width = new GridLength(1, GridUnitType.Star); // equal to Width="*" in xaml

使用时0,Canvas 的宽度为 0。但是可能会看到蓝色标签,因为 Canvas 不会在其边界上剪裁内容。

如果您尝试var _headerBlock = new Grid();使用零宽度列的 Grid ( ),则根本不会显示任何内容。


推荐阅读