【发布时间】:2015-07-19 19:32:39
【问题描述】:
我在调整应用程序窗口大小时遇到问题。我有两个 DataGrid,每个都放置在自己的 Grid 列中,另一列位于包含 GridSplitter 的 Grid 中间以调整 DataGrid 的大小。
通过从这个状态减小窗口宽度,我需要得到这个:
这样每个列和窗口都会达到 MinWidth。 但是我得到了这个(左列不在其最小宽度):
我注意到 DataGrid 中的列停止/减慢了网格列的收缩,导致窗口以最小尺寸切割第二部分。当另一列更宽时,另一列也会发生同样的情况。
这是我的 XAML 文件:
<Window x:Class="DC_SB.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Application" Height="350" Width="525" MinWidth="430" MinHeight="150" Background="WhiteSmoke">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Menu Grid.Row="0" Background="#FFE0E0E0">
<MenuItem Header="Settings">
<MenuItem Header="Key bindings" Click="keyBindings" />
<MenuItem Header="Color settings" Click="colorSettings" />
</MenuItem>
<MenuItem Header="View">
<MenuItem x:Name="ViewCounters" Header="Counters" IsCheckable="True" IsChecked="True" Click="OnMouseDownView" />
<MenuItem x:Name="ViewSounds" Header="Sounds" IsCheckable="True" IsChecked="True" Click="OnMouseDownView" />
</MenuItem>
<MenuItem Header="Enable">
<MenuItem x:Name="EnableCounters" Header="Counters" IsCheckable="True" IsChecked="True" Click="OnMouseDownEnable" />
<MenuItem x:Name="EnableSounds" Header="Sounds" IsCheckable="True" IsChecked="True" Click="OnMouseDownEnable" />
</MenuItem>
</Menu>
<Grid Grid.Row="1" x:Name="Grid" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="205" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" MinWidth="205" />
</Grid.ColumnDefinitions>
<GridSplitter Margin="0,25,0,10" Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="3" />
<Grid x:Name="CountersGrid" Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Content="Counters" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,0,0,0" />
<DataGrid x:Name="CountersList" Grid.Row="1" HorizontalAlignment="Stretch" Margin="10,0,10,10" AutoGenerateColumns="False" VerticalAlignment="Stretch"
CanUserResizeColumns="True" CanUserReorderColumns="False" CanUserSortColumns="False" SelectionMode="Single" CanUserDeleteRows="False"
CanUserAddRows="False" CanUserResizeRows="False" SelectionUnit="FullRow" MouseDoubleClick="OnDoubleClick" HeadersVisibility="Column" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" IsReadOnly="True" Binding="{Binding Path=Name}" />
<DataGridTextColumn Header="Path" IsReadOnly="True" Binding="{Binding Path=Path}" />
<DataGridTextColumn Header="Count" IsReadOnly="True" Binding="{Binding Path=CountKey}" />
</DataGrid.Columns>
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Foreground" Value="Black" />
</Style>
</DataGrid.Resources>
</DataGrid>
<Button Grid.Row="2" Content="Add" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="60" Click="addCounter" />
<Button Grid.Row="2" Content="Remove" HorizontalAlignment="Left" Margin="75,0,0,10" VerticalAlignment="Bottom" Width="60" Click="removeCounter" />
<Button Grid.Row="2" Content="-" HorizontalAlignment="Right" Margin="0,0,40,10" VerticalAlignment="Bottom" Width="25" Click="decrement" />
<Button Grid.Row="2" Content="+" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="25" Click="increment" />
</Grid>
<Grid x:Name="SoundsGrid" Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Content="Sounds" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,0,0,0" />
<Image Grid.Row="0" HorizontalAlignment="Right" Margin="0,8,110,0" VerticalAlignment="Top" Height="10" Width="10" >
<Image.Source>
<BitmapImage UriSource="volume.png" />
</Image.Source>
</Image>
<Slider x:Name="Slider" Grid.Row="0" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,10,5" Width="100" Maximum="100" Minimum="0"
AutoToolTipPlacement="BottomRight" IsMoveToPointEnabled="True" ValueChanged="volume" >
<Slider.LayoutTransform>
<ScaleTransform ScaleY="0.75" CenterX="15" CenterY="15"/>
</Slider.LayoutTransform>
</Slider>
<DataGrid x:Name="SoundsList" Grid.Row="1" HorizontalAlignment="Stretch" Margin="10,0,10,10" AutoGenerateColumns="False" VerticalAlignment="Stretch"
CanUserResizeColumns="True" CanUserReorderColumns="False" CanUserSortColumns="False" SelectionMode="Single" CanUserDeleteRows="False"
CanUserAddRows="False" CanUserResizeRows="False" SelectionUnit="FullRow" MouseDoubleClick="OnDoubleClick" HeadersVisibility="Column" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" IsReadOnly="True" Binding="{Binding Path=Name}" />
<DataGridTextColumn Header="Path" IsReadOnly="True" Binding="{Binding Path=Path}" />
<DataGridTextColumn Header="Key" IsReadOnly="True" Binding="{Binding Path=CountKey}" />
</DataGrid.Columns>
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Foreground" Value="Black" />
</Style>
</DataGrid.Resources>
</DataGrid>
<Button Grid.Row="2" Content="Add" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="60" Click="addSound" />
<Button Grid.Row="2" Content="Remove" HorizontalAlignment="Left" Margin="75,0,0,10" VerticalAlignment="Bottom" Width="60" Click="removeSound" />
<Button Grid.Row="2" HorizontalAlignment="Right" Margin="0,0,40,10" VerticalAlignment="Bottom" Width="25" Height="22" Click="play" >
<Image Source="play.png" Width="8" Height="8" />
</Button>
<Button Grid.Row="2" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="25" Height="22" Click="stop" >
<Image Source="stop.png" Width="8" Height="8" />
</Button>
</Grid>
</Grid>
</Grid>
我需要做的是使 DataGrid 不会影响调整网格列的大小。 感谢您的帮助
【问题讨论】:
-
在您的窗口设置中使用
SizeToContent="WidthAndHeight" -
不,这没有帮助
-
尝试将
MinWidth="430"设置为Auto并使用SizeToContent="WidthAndHeight" -
我无法将 MinWidth 设置为 Auto,只能设置为数字
-
抱歉去掉 MinWidth 设置,只使用对我有用的 sizetocontent