【问题标题】:WPF Custom control in WinForms with floating precision sizeWinForms中具有浮动精度大小的WPF自定义控件
【发布时间】:2012-10-30 18:12:35
【问题描述】:

我想知道是否可以在 wpf 中创建一个类似面板的控件,以及另一个 wpf 自定义控件将成为该面板的子控件,所有这些都在 WinForms 应用程序中。然后,是否可以将自定义控件的大小设置为浮动? 我还可以旋转那个自定义控件吗?

提前致谢

【问题讨论】:

    标签: c# wpf wpf-controls


    【解决方案1】:

    您将需要使用 System.Windows.Forms.Integration 命名空间,更具体地说是 ElementHost Control,这将允许您在 Winforms 中嵌入 WPF 控件。


    这是更改 WPF 用户控件子用户控件大小和位置的快速简单的演示。我把动画留给你。

    主 Winform 表单

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Windows.Forms.Integration;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            ElementHost host;
            WpfControlLibrary1.UserControl1 uc;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                host = new ElementHost();
                host.Dock = DockStyle.Top;
                uc = new WpfControlLibrary1.UserControl1();
                host.Child = uc;
                this.Controls.Add(host);
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                uc.SetChildLocation =  new  System.Windows.Point(uc.SetChildLocation.X + 25.5, uc.SetChildLocation.Y + 10.2);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                uc.SetChildSize = new System.Windows.Size(uc.SetChildSize.Width + .25, uc.SetChildSize.Height + .25);
            }
        }
    }
    

    UserControl1.xaml

    <UserControl x:Class="WpfControlLibrary1.UserControl1"
             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" 
             d:DesignHeight="300" d:DesignWidth="300" Background="Red" xmlns:my="clr-namespace:WpfControlLibrary1">
        <Canvas>
            <my:UserControl2 HorizontalAlignment="Center"   x:Name="userControl21" VerticalAlignment="Center" Canvas.Left="0" Canvas.Top="0" />
    
        </Canvas>
    </UserControl>
    

    UserControl1.xaml.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfControlLibrary1  
    {
        /// <summary>
        /// Interaction logic for UserControl1.xaml
        /// </summary>
        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
    
            public Point  SetChildLocation
            {
                get
                {
                    return new Point(Canvas.GetLeft(userControl21), Canvas.GetTop(userControl21));
                }
    
                set
                {
                    Canvas.SetLeft(userControl21, value.X);
                    Canvas.SetTop(userControl21, value.Y);
                }
            }
    
            public Size SetChildSize
            {
                get
                {
                    return new Size(userControl21.ActualWidth, userControl21.ActualHeight);
                }
                set
                {
                    userControl21.Width = value.Width;
                    userControl21.Height = value.Height;
                }
            }
        }
    }
    

    UserControl2.xaml

    <UserControl x:Class="WpfControlLibrary1.UserControl2"
             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" 
             d:DesignHeight="300" d:DesignWidth="300" SizeChanged="UserControl_SizeChanged">
        <Grid>
            <Rectangle x:Name="rect" Fill="Blue" Height="40" Width="120"></Rectangle>
        </Grid>
    </UserControl>
    

    UserControl2.xaml.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfControlLibrary1
    {
        /// <summary>
        /// Interaction logic for UserControl2.xaml
        /// </summary>
        public partial class UserControl2 : UserControl
        {
            public UserControl2()
            {
                InitializeComponent();
            }
    
            private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                rect.Width = e.NewSize.Width;
                rect.Height = e.NewSize.Height;
            }
        }
    }
    

    【讨论】:

    • 感谢您的快速响应。我有一个小忙想问一下,你能不能给我举个例子来告诉我怎么做?我真的很感激。
    • @user1806687 我会看看我能想出什么
    • 谢谢,你是最棒的! :D
    • 哇,非常感谢!当我尝试时,我会回复你。再次感谢! :D
    • @user1806687 我创建了一个单独的 WpfUserControl 库项目并添加了对 Winform 项目的项目引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多