Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当窗口大小更改时,如何在窗口内处理UserControl_C#_Wpf_User Controls_Window Resize - Fatal编程技术网

C# 当窗口大小更改时,如何在窗口内处理UserControl

C# 当窗口大小更改时,如何在窗口内处理UserControl,c#,wpf,user-controls,window-resize,C#,Wpf,User Controls,Window Resize,我有一个用WPF编写的主窗口,它包含三个子窗口和一个带按钮的用户控件。看起来是这样的: 我想做的是让子窗口的比例和按钮的位置与主窗口的大小成比例地固定 我已经处理了子窗口的大小比例,但是当主窗口的宽度被扩展时,我不能将按钮保持在左侧: 这是我的代码: private void MainWindowResize(对象发送器,SizeChangedEventArgs e) { //子窗口大小比率 形式高度=(实际高度-80)*0.5; 形式宽度=此实际宽度; 表B.高度=(此实际高度-80)*0

我有一个用WPF编写的主窗口,它包含三个子窗口和一个带按钮的用户控件。看起来是这样的:

我想做的是让子窗口的比例和按钮的位置与主窗口的大小成比例地固定

我已经处理了子窗口的大小比例,但是当主窗口的宽度被扩展时,我不能将按钮保持在左侧:

这是我的代码:

private void MainWindowResize(对象发送器,SizeChangedEventArgs e)
{
//子窗口大小比率
形式高度=(实际高度-80)*0.5;
形式宽度=此实际宽度;
表B.高度=(此实际高度-80)*0.5;
formB.Width=此.ActualWidth*0.5;
表C.高度=(此.实际高度-80)*0.5;
formC.Width=此.ActualWidth*0.5;
//按钮不会随此代码向左移动
btnFrame.Width=this.ActualWidth;
}
+)WPF代码:
主窗口


BTN帧



是否有办法将按钮固定在左侧?

我不知道
btnFrame
是什么类型的控件,但您可以将按钮放在例如
StackPanel
的内部,并在其上设置
HorizontalAlignment=“left”
。 您的WPF代码将有助于提供更好的答案


发布WPF后,我认为您应该从
框架中删除
Width=“800”
属性,以便它始终拉伸以适合其包含的
DockPanel
。此外,我看不到WPF中的
btnFrame
名称设置在哪里。

您自己没有大小控制。WPF提供了开箱即用的布局,还有用于比例布局的面板,如或

在XAML中,您的示例可能如下所示。
矩形
s代表您的视图。使用
网格
面板,您可以定义行和列,并通过它们的行和列,您可以将
高度
宽度
设置为显式大小,例如
100
,让大小自动确定以适应
自动
的内容,或者设置星号大小,如
2*
,用于定义比例。默认值为
*
,因此在下面的布局中,最后一行的大小与其内容相符,其他行的大小按1:1的比例排列

<Grid>
   <Grid.RowDefinitions>
      <RowDefinition/>
      <RowDefinition/>
      <RowDefinition Height="Auto"/>
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
      <ColumnDefinition/>
      <ColumnDefinition/>
   </Grid.ColumnDefinitions>
   <Rectangle Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Fill="Pink"/>
   <Rectangle Grid.Row="1" Grid.Column="0" Fill="MediumSeaGreen"/>
   <Rectangle Grid.Row="1" Grid.Column="1" Fill="LightBlue"/>
   <StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal">
      <Button Content="A" Width="100" Height="50"/>
      <Button Content="B" Width="100" Height="50" Margin="10, 0, 0, 0"/>
   </StackPanel>
</Grid>

-- . 顺便说一句,你的意思是你有一个WPF窗口承载WinForms的用户控件(或者表单,不太清楚)?在任何情况下,您都不需要手动处理所有这些。另请参见
自动
高度/宽度,
水平对齐
垂直对齐
可以设置为
拉伸
等。另外@Jimi感谢您的评论。没错。MainWindow是WPF窗口、formA、B、C WinForms和btnFrame a用户控件。我已经检查了你建议的那些,但是我仍然坚持这个问题。谢谢你的建议。我已经将我的WPF代码添加到我的问题中。谢谢你的示例!我明白你的意思。但当我从其他项目托管WinForms和UserControl时,我仍然找不到控制大小的解决方案。
var grid = new Grid();

grid.RowDefinitions.Add(new RowDefinition());
grid.RowDefinitions.Add(new RowDefinition());
grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });

grid.ColumnDefinitions.Add(new ColumnDefinition());
grid.ColumnDefinitions.Add(new ColumnDefinition());

var pinkRectangle = new System.Windows.Shapes.Rectangle { Fill = Brushes.Pink };
grid.Children.Add(pinkRectangle);
Grid.SetRow(pinkRectangle, 0);
Grid.SetColumn(pinkRectangle, 0);
Grid.SetColumnSpan(pinkRectangle, 2);

var greenRectangle = new System.Windows.Shapes.Rectangle { Fill = Brushes.MediumSeaGreen };
grid.Children.Add(greenRectangle);
Grid.SetRow(greenRectangle, 1);
Grid.SetColumn(greenRectangle, 0);

var blueRectangle = new System.Windows.Shapes.Rectangle { Fill = Brushes.LightBlue };
grid.Children.Add(blueRectangle);
Grid.SetRow(blueRectangle, 1);
Grid.SetColumn(blueRectangle, 1);

var buttonA = new Button
{
   Content = "A",
   Width = 100,
   Height = 50
};

var buttonB = new Button
{
   Content = "B",
   Width = 100,
   Height = 50,
   Margin = new Thickness(10, 0, 0, 0)
};

var stackPanel = new StackPanel { Orientation = Orientation.Horizontal };
grid.Children.Add(stackPanel);
Grid.SetRow(stackPanel, 2);
Grid.SetColumn(stackPanel, 0);
Grid.SetColumnSpan(stackPanel, 2);

stackPanel.Children.Add(buttonA);
stackPanel.Children.Add(buttonB);