【发布时间】:2013-08-14 04:28:27
【问题描述】:
我在搞乱DataGrid 标头并发现了一些尴尬的东西。我一直在玩弄它,直到在 XAML 中找到根本原因并构建了一个如何重现的小样本。
我只使用文本框和数据网格对此进行了测试,但我怀疑它也适用于其他控件。当数据网格或文本框的宽度通过ActualWidth 绑定到同级元素时,在数据网格或文本框上设置Margin 属性(我设置Margin="2")将导致我的整个Visual Studio 几乎立即停止响应。
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal" x:Name="panel">
<TextBlock Text="Text:1" Width="90" />
<TextBox Width="90" />
</StackPanel>
<DataGrid AutoGenerateColumns="False" Width="{Binding ActualWidth, ElementName=panel}">
<DataGrid.Columns>
<DataGridTextColumn Header="Test" Width="*" />
<DataGridTextColumn Header="Test2" Width="*" />
<DataGridTextColumn Header="Test3" Width="*" />
</DataGrid.Columns>
</DataGrid>
<TextBox Width="{Binding ActualWidth, ElementName=panel}" />
</StackPanel>
</Window>
这是设计预览在停止响应之前的样子。窗口延伸到“无穷大”,直到我怀疑 VS 内存不足。
知道是什么原因造成的吗?
【问题讨论】:
-
为每个控件尝试
HorizontalAlignment="Left"(StackPanel、DataGrid、TextBox)。面板宽度为180,其余部分将继承此值。我认为这是StackPanel的一个特点。
标签: .net wpf xaml user-controls actualwidth