我已經開始工作的WPF控件的DLL將從winforms應用程序引用。WPF控件的DLL問題
我在這個項目中的第一個控件是一個簡單的容器控件。它的目的是爲Winforms應用程序提供一個無模式,透明的對接窗口。
我對這個控件的問題是,當我嘗試拖動它時我無法讓它移動。如果我不把它放到.dll中,我可以移動它。在dll裏面,Canvas.GetLeft - 返回一個無效的數字,我不知道如何解決這個問題。
這裏是XAML的此控件的批量:
<Grid Height="Auto">
<Grid.Resources>
<LinearGradientBrush x:Key="BackBrush" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#C4000000"/>
<GradientStop Offset="1" Color="#66000000"/>
<GradientStop Color="#61000000" Offset="0.50400000810623169"/>
</LinearGradientBrush>
</Grid.Resources>
<Border Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Margin="0,0,0,0" BorderBrush="#FF000000" BorderThickness="2,2,2,2" Background="{StaticResource BackBrush}" Opacity="1" CornerRadius="8,8,8,8">
<StackPanel Background="{x:Null}" Opacity="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Top" x:Name="spWhatAreYouDoing">
<ContentControl></ContentControl>
</StackPanel>
</Border>
<Thumb Background="{x:Null}" Opacity="0" DragDelta="onDragDelta" x:Name="panelthumb"/>
</Grid>
我的代碼鉤住拇指onDragDelta事件背後,並用它來拖動該窗口。 當我在相同的.exe中使用它時,它工作正常。
public void onDragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
Canvas.SetLeft(this, Canvas.GetLeft(this) + e.HorizontalChange);
Canvas.SetTop(this, Canvas.GetTop(this) + e.VerticalChange);
}
當我採取相同的代碼出來的.exe文件,並將其放置到一個.dll然後引用.dll和使用來自我的exe文件的控制 - 它不會拖了。該窗口顯示但不會移動。
它不會被移動的原因是因爲Canvas.GetLeft(this)返回一個無效數字。爲什麼?儘管此控件的目標是由Winforms應用程序使用,但是當我在沒有任何ElementHost干預的情況下從WPF應用程序使用它時,我發現了相同的行爲。
編輯 - 當我使用ElementHost直接在我的Winforms應用程序中託管這個控件時,我可以移動窗口。但窗口透明度已經丟失。因此,向WPF移植此表單的所有理由都是無效的。
所以我做了這個錯誤 - 從一個.dll託管的控件中調用GetLeft的正確方法是什麼?
感謝我應該說這個最高層,我會添加編輯。 當我直接在我的Winform應用程序中託管時,我失去了窗口透明度。這不會起作用.......... – bperreault 2009-08-19 14:07:59