[英]WPF Custom control in WinForms with floating precision size
我想知道是否有可能在wpf中創建一個類似於面板的控件,而另一個wpf自定義控件將成為該面板的子控件,所有這些都在WinForms應用程序中。 然后,可以在float中設置自定義控件的大小嗎? 我還能旋轉該自定義控件嗎?
提前致謝
您將需要使用System.Windows.Forms.Integration
命名空間,更具體地說是ElementHost控件 ,該控件將使您可以將WPF控件嵌入Winforms。
這是更改WPF UserControls子UserControls大小和位置的快速簡單演示。 我將把動畫留給您。
主要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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.