初始化后,调整父窗口中托管的UserControl的大小

时间:2020-09-07 07:24:49

标签: c# wpf

我正在使用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>

启动时,我的对话框具有托管用户控件中网格的大小。没关系。但是,当调整外部窗口的大小时,用户控件内部的网格将保持相同的静态设置大小。我希望外部窗口在初始化时具有内容的大小,然后再使用外部窗口调整内容的大小。这可能吗?

谢谢

1 个答案:

答案 0 :(得分:0)

  1. 如果您并不总是希望RowDefinitions具有固定的大小,则从ColumnDefinitions的定义中摆脱掉UserControlSizeChanged

  2. 在窗口中设置其初始大小,然后两次处理 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                
相关问题