我正在使用Window来承载几个不同的用户控件作为对话框。窗口基本上是这样的:
<Window x:Class="GenericWindow"
x:Name="BaseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
d:DataContext="{d:DesignInstance Type=wpfDialogs:DialogViewModel,
IsDesignTimeCreatable=True}"
Title="{Binding Title}"
SizeToContent="WidthAndHeight"
MinWidth="400" MinHeight="400"
WindowStyle="ToolWindow"
ResizeMode="CanResizeWithGrip"
Loaded="Window_Loaded">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" Margin="10 10 10 0" Content="{Binding}"/>
</Window>
我的UserControl如下:
<UserControl x:Class="PickControl"
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:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:dxprg="http://schemas.devexpress.com/winfx/2008/xaml/propertygrid"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
mc:Ignorable="d"
x:Name="mainWindow">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height ="600" MinHeight="200"/>
<RowDefinition Height ="15"/>
<RowDefinition Height ="400" MinHeight="100"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width ="700"/>
</Grid.ColumnDefinitions>
<-- content goes here -->
</UserControl>
启动时,我的对话框具有托管用户控件中网格的大小。没关系。但是,当调整外部窗口的大小时,用户控件内部的网格将保持相同的静态设置大小。我希望外部窗口在初始化时具有内容的大小,然后再使用外部窗口调整内容的大小。这可能吗?
谢谢
答案 0 :(得分:0)
如果您并不总是希望RowDefinitions
具有固定的大小,则从ColumnDefinitions
的定义中摆脱掉UserControl
和SizeChanged
。
在窗口中设置其初始大小,然后两次处理 private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
SizeChanged -= Window_SizeChanged;
SizeChanged += RemoveInitialSizeConstraints;
}
private void RemoveInitialSizeConstraints(object sender, SizeChangedEventArgs e)
{
cc.Height = double.NaN;
cc.Width = double.NaN;
SizeChanged -= RemoveInitialSizeConstraints;
}
事件:
<Window x:Class="GenericWindow"
x:Name="BaseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
d:DataContext="{d:DesignInstance Type=wpfDialogs:DialogViewModel,
IsDesignTimeCreatable=True}"
Title="{Binding Title}"
SizeToContent="WidthAndHeight"
MinWidth="400" MinHeight="400"
WindowStyle="ToolWindow"
ResizeMode="CanResizeWithGrip"
Loaded="Window_Loaded"
SizeChanged="Window_SizeChanged">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ContentPresenter x:Name="cc" Grid.Row="0" Margin="10 10 10 0" Content="{Binding}"
Height ="600" MinHeight="200" Width="700"/>
</Window>
XAML:
SELECT name, id_number, hr.id, file, created_at, updated_at
From users u
LEFT JOIN homework_targets ht on u.class_id = ht.class_id
LEFT JOIN homework_replies hr on u.id = hr.user_id
WHERE u.role = 'student' AND hr.homework_id = 8