winforms 응용 프로그램에서 참조 할 WPF controls dll에 대한 작업을 시작했습니다.WPF Controls DLL 질문
이 프로젝트의 첫 컨트롤은 간단한 컨테이너 컨트롤입니다. 삶의 목적은 모덜리스의 투명 도킹 윈도우를 Winforms 앱에 제공하는 것입니다.
이 컨트롤의 문제점은 끌기를 시도 할 때 움직일 수 없다는 것입니다. .dll 파일에 넣지 않으면 옮길 수 있습니다. DLL 내부에서 Canvas.GetLeft는 잘못된 숫자를 반환하며이를 해결하는 방법을 모르겠습니다.
<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 이벤트를 구부려 주변이 창을 드래그 것을 사용했습니다
다음은이 컨트롤에 대한 XAML의 대부분이다. 동일한 .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을 참조하고 내 EXE에서 컨트롤을 사용 .dll 인으로 배치 - 그것은 더 이상 끌어되지 않습니다. 창이 표시되지만 이동하지는 않습니다.
Canvas.GetLeft (this)가 잘못된 숫자를 반환하기 때문에 이동되지 않는 이유가 있습니다. 왜? 이 컨트롤의 대상은 Winforms 앱에서 사용하지만, ElementHost 개입없이 WPF 앱에서이 컨트롤을 사용하면이 동일한 동작을 찾습니다.
편집 - ElementBox를 사용하여 내 Winforms 앱에서이 컨트롤을 직접 호스팅 할 때 창을 이동할 수 있습니다. 그러나 창 투명도가 손실됩니다. 따라서이 양식에 대한 WPF 로의 이전 이유는 모두 유효하지 않습니다.
그래서 내가 잘못 했어 - .dll에서 호스팅되는 컨트롤 내에서 GetLeft를 호출하는 올바른 방법은 무엇입니까?
고마워요. 이걸 꼭대기에 올려야합니다. 편집을 추가하겠습니다. 내 Winform 응용 프로그램 내에서 직접 호스팅 할 때 창 투명도가 손실됩니다. 그게 효과가 없을거야 .......... – bperreault