c# - 设置动态生成的 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
(由于Green
root 的背景而明显Grid
。)对此有任何帮助将不胜感激,因为它非常令人沮丧。我正在使用框架的版本6.2
,如果它起作用(我注意到了一些其他奇怪的行为,但主要是因为这些s 需要很多子元素并且解析器太破碎而无法命名它们- 这使它们几乎毫无用处。).NET
Windows 7
ContentControl
VS 2017
XAML
解决方案
解决方案是对 ColumnDefinition 使用非零宽度:
_rootGrid.ColumnDefinitions[0].Width = new GridLength(1, GridUnitType.Star); // equal to Width="*" in xaml
使用时0
,Canvas 的宽度为 0。但是可能会看到蓝色标签,因为 Canvas 不会在其边界上剪裁内容。
如果您尝试var _headerBlock = new Grid();
使用零宽度列的 Grid ( ),则根本不会显示任何内容。
推荐阅读
- android - Xamarin Android QR 扫描仪应用程序
- python - Python中的骰子滚轮不是随机的
- ibm-cloud - IBM Bluemix:如果没有现收现付帐户,则无法在该区域创建集群
- r - 参数必须可强制转换为 R 中的非负整数
- python - 如何开始在 python 2.7 中进行并行处理?
- python - 如何创建实时动态更新的无限动画帧?
- clojure - Clojure gorilla repl 和 JVM 10 异常
- android - 片段布局中的视图没有在正确的时间膨胀?
- python - 如果满足条件,则制作/保存图表,其中图表从 X 点开始
- jquery - 在列而不是行中写入表(扩展)