【问题标题】:Wpf Control moving don't works when hosted to WinForm托管到 WinForm 时,Wpf 控件移动不起作用
【发布时间】:2012-09-04 15:20:37
【问题描述】:

我使用this 文章创建了一些runtime moveble controlWPF 项目中一切正常,但是当我将WPF control 托管到WinForm 时,它一直不想工作。有人知道哪里有问题吗?

C# 可移动部分control

using System.Windows.Controls;
using System.Windows.Controls.Primitives;

namespace EvTest.Resource
{

public class MoveThumb : Thumb
{
    public MoveThumb()
    {
        DragDelta += new DragDeltaEventHandler(this.MoveThumb_DragDelta);
    }

    private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        Control designerItem = this.DataContext as Control;


            double left = Canvas.GetLeft(designerItem);
            double top = Canvas.GetTop(designerItem);

            Canvas.SetLeft(designerItem, left + e.HorizontalChange);
            Canvas.SetTop(designerItem, top + e.VerticalChange);

    }
}
}

Xaml控制部分:

<UserControl x:Class="EvTest.Control"
         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"
         xmlns:s="clr-namespace:EvTest.Resource"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>

        <!-- MoveThumb Template -->
        <ControlTemplate x:Key="MoveThumbTemplate" TargetType="{x:Type s:MoveThumb}">
            <Rectangle Fill="Transparent"/>
        </ControlTemplate>

        <!-- ResizeDecorator Template -->


        <!-- Designer Item Template-->
        <ControlTemplate x:Key="DesignerItemTemplate" TargetType="ContentControl">
            <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
                <s:MoveThumb Template="{StaticResource MoveThumbTemplate}"/>
                <ContentPresenter Content="{TemplateBinding ContentControl.Content}"/>
            </Grid>
        </ControlTemplate>

    </UserControl.Resources>

    <Canvas>
        <ContentControl Width="130"
                MinWidth="50"
                Height="130"
                MinHeight="50"
                Canvas.Top="149"
                Canvas.Left="158"
                Template="{StaticResource DesignerItemTemplate}">
            <Ellipse Fill="Red"
           IsHitTestVisible="False"/>
        </ContentControl>
        <ContentControl Width="130"
                MinWidth="50"
                Height="130"
                MinHeight="50"
                Canvas.Top="12"
                Canvas.Left="12"
                Template="{StaticResource DesignerItemTemplate}">
            <Path Fill="Blue"
        Data="M 0,5 5,0 10,5 5,10 Z"
        Stretch="Fill"
        IsHitTestVisible="False"/>
        </ContentControl>
    </Canvas>


</UserControl>

【问题讨论】:

  • 我虽然 WinForms 和 WPF 有完全不同的渲染。您在哪里看到可以在 WinForms 中使用 WPF 控件?
  • @Yoztastic 这个链接可以帮助你link

标签: c# wpf winforms integration


【解决方案1】:

我发现问题。应该是这样的:

private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e)
{
    ContentControl designerItem = this.DataContext as ContentControl;


        double left = Canvas.GetLeft(designerItem);
        double top = Canvas.GetTop(designerItem);

        Canvas.SetLeft(designerItem, left + e.HorizontalChange);
        Canvas.SetTop(designerItem, top + e.VerticalChange);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多