【问题标题】:Arranging controls inside a panel of WindowsFormHost - wpf在 WindowsFormHost 面板内排列控件 - wpf
【发布时间】:2020-04-30 09:55:38
【问题描述】:

我在下面的面板中有三个控件。我必须在面板的中心安排一个。其他两个应该放在中心一个的左右两侧。 我已经尝试过如下。但是让所有三个控件都向左对齐。请帮忙改正。

   <WindowsFormsHost  x:Name="windowsFormsHost1"  Grid.Row="5"   Grid.ColumnSpan="3"   Initialized="WindowsFormsHost_Initialized"  HorizontalAlignment="Center" VerticalAlignment="Center"  >
        <wf:Panel x:Name="Panel_glcontrol" Dock="None" BackColor="yellow" >
            <wf:Panel.Controls>
                <opentk:GLControl x:Name="glControl" Width="450" Height="299"  Dock="None"   Visible="True" MouseMove="GlControl_MouseMove" MouseDown="GlControl_MouseDown"  Resize="glControl_Resize" Paint="glControl_Paint"  />
                <opentk:GLControl x:Name="glControl2"  Width="450" Height="299" Dock="None"    MouseDown="GlControl2_MouseDown" MouseMove="GlControl2_MouseMove"   Visible="True"  Resize="glControl2_Resize" Paint="glControl2_Paint"  />
                <opentk:GLControl x:Name="glControl3" Width="450" Dock="None" Height="299"  Visible="True"  MouseDown="GlControl3_MouseDown" MouseMove="GlControl3_MouseMove" Resize="glControl3_Resize" Paint="glControl3_Paint" />
            </wf:Panel.Controls>
        </wf:Panel>
    </WindowsFormsHost>

     glControl2.Location = new System.Drawing.Point((_Screenwidth / 2) - glControl2.Width / 2, (_Screenheight - glControl.Height) / 2);
     glControl.Location = new System.Drawing.Point(glControl2.Location.X - glControl.Width - 5, (_Screenheight - glControl2.Height) / 2 );          
     glControl3.Location = new System.Drawing.Point(glControl2.Location.X + glControl2.Width + 5, (_Screenheight - glControl3.Height) / 2 );

【问题讨论】:

    标签: c# wpf panel windowsformshost


    【解决方案1】:

    如果您将每个 WinForms 控件放在其自己的宿主中,然后使用 WPF 面板进行布局会怎样?像这样的:

    <UniformGrid Rows="1" Grid.Row="5" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Yellow">
        <WindowsFormsHost>
            <opentk:GLControl x:Name="glControl" Width="450" Height="299" Dock="None" Visible="True" MouseMove="GlControl_MouseMove" MouseDown="GlControl_MouseDown" Resize="glControl_Resize" Paint="glControl_Paint"/>
        </WindowsFormsHost>
        <WindowsFormsHost>
            <opentk:GLControl x:Name="glControl2" Width="450" Height="299" Dock="None" MouseDown="GlControl2_MouseDown" MouseMove="GlControl2_MouseMove" Visible="True" Resize="glControl2_Resize" Paint="glControl2_Paint"/>
        </WindowsFormsHost>
        <WindowsFormsHost>
            <opentk:GLControl x:Name="glControl3" Width="450" Dock="None" Height="299" Visible="True" MouseDown="GlControl3_MouseDown" MouseMove="GlControl3_MouseMove" Resize="glControl3_Resize" Paint="glControl3_Paint"/>
        </WindowsFormsHost>
    </UniformGrid>
    

    【讨论】:

    • 我需要一个 WindowsFormsHost 中的所有控件。
    【解决方案2】:

    我已经通过删除 WindowsFormsHost 的水平和垂直对齐来解决它。然后添加下面的函数来重新定位控件。

         private void RelocateOpenGLs()
        {
            int PSBH = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
            int TaskBarHeight = PSBH - System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;//have to hide taskbar
    
            glControl2.Location = new System.Drawing.Point((_Screenwidth / 2) - glControl2.Width / 2, ((Panel_glcontrol.Height - glControl.Height) / 2) - TaskBarHeight);
            glControl.Location = new System.Drawing.Point(glControl2.Location.X - glControl.Width - 2, ((Panel_glcontrol.Height - glControl2.Height) / 2) - TaskBarHeight);
            glControl3.Location = new System.Drawing.Point(glControl2.Location.X + glControl2.Width + 2, ((Panel_glcontrol.Height - glControl3.Height) / 2) - TaskBarHeight);
    
        }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-18
      • 2014-01-22
      • 1970-01-01
      • 2015-06-11
      • 2011-08-22
      • 1970-01-01
      • 2013-10-25
      • 2015-03-24
      相关资源
      最近更新 更多