我有{strong> WPF Window
,DataGrid
内有Grid
,如下所示:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight" WindowStyle="ToolWindow" ResizeMode="NoResize">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock FontSize="20">Some header with some pretty longish text</TextBlock>
<DataGrid Grid.Row="1" Height="200">
<DataGrid.Columns>
<DataGridTextColumn Header="Column1" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
我希望DataGrid
的宽度至少是TextBlock
的宽度,在这种情况下,因为Grid
的{{1}} }的宽度设置为ColumnDefinition
。
但不知何故,Auto
DataGrid
的宽度最小(甚至无法调整大小),而我希望它的宽度可以填充。目前它看起来像这样:
请注意,该窗口必须为Column
且ToolWindow
设置为SizeToContent
。
答案 0 :(得分:3)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
修正:固定大小的逻辑单位(1/96英寸)
自动:占用控件所需的空间
Star():占用尽可能多的空间(在填充所有自动和固定大小的列之后),按比例划分所有星形大小的列。所以3 / 5 *表示与30 * / 50 *相同。请记住,如果网格大小是根据其内容计算的,则星号大小不起作用。
答案 1 :(得分:2)
摆脱
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
或者将“宽度”设置为*而不是“自动”。
答案 2 :(得分:1)
我能想出的唯一解决方法是使用DataGrid
&#39; {DataGrid
加载 <DataGrid Grid.Row="1" Height="200" x:Name="MyDg" Loaded="MyDg_OnLoaded">
<DataGrid.Columns>
<DataGridTextColumn x:Name="MyDgtc" Header="Column1"/>
</DataGrid.Columns>
</DataGrid>
时,从后面的代码中手动设置列的宽度{3}}属性:
private void MyDg_OnLoaded(object sender, RoutedEventArgs e)
{
MyDgtc.Width = MyDg.ActualWidth;
}
处理程序:
lower = int(input("Enter lower range: "))
upper = int(input("Enter upper range: "))
print("Prime numbers between", lower, "and", upper, "are:")
def get_primes():
for num in range(lower, upper + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
yield num
print ', '.join([str(n) for n in get_primes()])
我也很感兴趣为什么会发生这种情况,一旦我找到了什么,我会更新我的答案。
答案 3 :(得分:1)
<TextBlock Name="Fred" FontSize="20" Text="Some header with pretty longish test" HorizontalAlignment="Left"></TextBlock>
<DataGrid Grid.Row="1" Height="200" MinColumnWidth="{Binding ElementName=Fred, Path=ActualWidth}">
<DataGrid.Columns>
<DataGridTextColumn Header="Column1"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
使用数据绑定来获取文本块的实际宽度(我称之为'fred')并使用它来设置数据网格的mincolumnwidth。
答案 4 :(得分:1)
这在运行时有效,但似乎没有(总是)出现在设计器中。
使用相对源或元素名称将DataGrid绑定到包装器的ActualWidth:
一个。 Width="{Binding Path=ActualWidth, ElementName=WrapperGrid}"
湾Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid}}"
如果您没有SizeToContent="WidthAndHeight"
选项,则不会出现在设计师中:
但是,无论你运行它后,宽度都是正确的:
使用SizeToContent="WidthAndHeight"
:
没有SizeToContent="WidthAndHeight"
:
以下完整代码:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
SizeToContent="WidthAndHeight"
WindowStyle="ToolWindow"
ResizeMode="NoResize">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition
Height="Auto" />
<RowDefinition
Height="Auto" />
</Grid.RowDefinitions>
<TextBlock
x:Name="Tb1"
FontSize="20">Some header with some pretty longish text</TextBlock>
<Grid
Grid.Row="1"
Grid.Column="0">
<DataGrid
Grid.Row="1"
Height="200"
Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid}}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn
Header="Column1"
Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
</Window>
答案 5 :(得分:0)
首先抱歉我的英文
在这里,你需要什么。
你的问题在于线路占用空间的定义,正如其他人已经告知你如果离开“自动”它会占用必要的宽度来装箱你的内容而没有别的,如果你留下*它将占用所有剩余空间
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
你的窗口:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
WindowStyle="ToolWindow"
ResizeMode="NoResize" >
<Grid>
<!-- not necessary but you can set it -->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- your rows -->
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- first row -->
<Grid Row="0">
<TextBlock FontSize="20" Text="Some header with some pretty longish text"/>
</Grid>
<!-- second line, your datagrid, I have changed to fit all available space -->
<Grid Row="1">
<DataGrid Grid.Row="1">
<DataGrid.Columns>
<DataGridTextColumn Header="Column1" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
</Window>