当我单击最大化按钮时,窗口最大化但控件未按比例调整大小.使控件调整大小的最佳方法是什么?我正在使用MVVM.
这是我的代码.
<Window x:Class="DataTransfer.View.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Icon="/DataTransfer;component/View/Images/ms_msnexplore.gif"
ResizeMode="CanResizeWithGrip"
Title="Window1" Height="500" Width="600">
<!--Style="{DynamicResource OfficeStyle}"-->
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--<ResourceDictionary Source="/DataTransfer;component/View/WindowBase.xaml" />-->
<!--<ResourceDictionary Source="/DataTransfer;component/Themes/WPFThemes/CalendarResource.xaml" />-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width ="*" />
</Grid.ColumnDefinitions>
<Button Content="Button" HorizontalAlignment="Left" Margin="52,28,0,0" VerticalAlignment="Top" Width="75" Height="22" />
<DatePicker Name="dp" HorizontalAlignment="Left" Margin="175,25,0,0" VerticalAlignment="Top" Width="123" Text="aaa" GotFocus="DateGotFocused" LostFocus="OnLeaveArchiveDate"/>
<Calendar HorizontalAlignment="Left" Margin="47,162,0,0" VerticalAlignment="Top"/>
<TextBox Name="t1" HorizontalAlignment="Left" Height="23" Margin="337,23,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" LostFocus="LeaveField" />
<RadioButton Content="RadioButton" HorizontalAlignment="Left" Margin="88,92,0,0" VerticalAlignment="Top"/>
<CheckBox Content="CheckBox" HorizontalAlignment="Left" Margin="252,96,0,0" VerticalAlignment="Top"/>
<ComboBox Name="combo" IsEditable="False" Text="aaa" IsReadOnly="True"
HorizontalAlignment="Left" Margin="337,89,0,0" VerticalAlignment="Top" Width="120"
Focusable="True" GotFocus="ComboBoxGotFocused" >
<ComboBoxItem>January</ComboBoxItem>
<ComboBoxItem>February</ComboBoxItem>
</ComboBox>
<TextBlock HorizontalAlignment="Left" Height="40" Margin="260,184,0,0" TextWrapping="Wrap" Text="Text_Block" VerticalAlignment="Top" Width="257"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
She*_*dan 88
在WPF中,某些"容器"控件会自动调整其内容的大小,而有些则不会.
以下是一些不调整其内容的内容(我猜你正在使用其中一个或多个):
StackPanel
WrapPanel
Canvas
TabControl
Run Code Online (Sandbox Code Playgroud)
这里有一些做调整它们的内容:
Grid
UniformGrid
DockPanel
Run Code Online (Sandbox Code Playgroud)
因此,除非您不希望自动调整大小,否则几乎总是优先使用a Grid而不是a .请注意,它仍然是可能的,以不大小其内部控制......这一切都取决于你和设置:StackPanelGridGrid.RowDefinitionGrid.ColumnDefinition
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100" /> <!--<<< Exact Height... won't resize -->
<RowDefinition Height="Auto" /> <!--<<< Will resize to the size of contents -->
<RowDefinition Height="*" /> <!--<<< Will resize taking all remaining space -->
</Grid.RowDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)
您可以Grid从MSDN上的" Grid类"页面中找到有关控件的更多信息.您还可以从MSDN上的WPF容器控件概述页面找到有关这些容器控件的更多信息.
使用FrameworkElement.HorizontalAlignment和FrameworkElement.VerticalAlignment属性可以实现进一步的大小调整.这些属性的默认值是Stretch拉伸元素以适合其包含控件的大小.但是,当它们设置为任何其他值时,元素将不会拉伸.
更新>>>
回答您评论中的问题:
使用Grid.RowDefinition和Grid.ColumnDefinition设置首先组织基本结构... 如果需要,通常将Grid控件添加到外部Grid控件的单元格中.您还可以使用Grid.ColumnSpan和Grid.RowSpan属性来启用控件以跨越a的多个列和/或行Grid.
这是最常用的至少有一排/与列Height/ Width的"*"这将填补所有的剩余空间,但你可以有两个或两个以上使用此设置,在这种情况下,剩余的空间将两个(或更多)之间拆分行/列."自动"是一个很好的设置,可用于未设置为""*"'的行/列,但它实际上取决于您希望布局的方式.
没有Auto设置,你可以在细胞中的控件使用,但是这仅仅是为好,因为我们要Grid为我们的大小控制.所以,我们不想设置Height或Width这些控件的所有.
关于FrameworkElement.HorizontalAlignment和FrameworkElement.VerticalAlignment属性的观点只是让你知道它们的存在......因为它们的默认值已经存在Stretch,你通常不需要明确地设置它们.
该Margin属性通常仅用于将控件均匀分布...如果从Visual Studio工具箱中拖放控件,VS将设置Margin属性以将控件准确放置在放置它的位置但通常,这不是我们想要的因为它会混淆控件的自动调整大小.如果您这样做,那么只需删除或编辑Margin属性以满足您的需求.
| 归档时间: |
|
| 查看次数: |
125178 次 |
| 最近记录: |