2009-06-10 26 views
10

サイジング私はWPFにWindowsFormsHostは

<UserControl x:Class="MVVMLibrary.ReportViewer" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ws="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" 
    Height="Auto" Width="Auto"> 
    <Grid> 
     <WindowsFormsHost Name="Host"> 
      <ws:ReportViewer/> 
     </WindowsFormsHost> 
    </Grid> 
</UserControl> 

お知らせその高さのWPFユーザーコントロールのWindowsフォームコントロールをラップしたいと幅が自動です。

私はスタックパネルまたはグリッドコントロールでその高さを0に設定し、基本的に消えます。ユーザーは、ウィンドウのサイズを変更する必要があります(これは、ユーザーコントロールが私にスペースを必要としないと言ったため縮小しました。ありがとう)。ユーザーがサイズを変更すると、ユーザーが指定したものに拡張されます。

私の質問は何ですか?どのように私のusercontrolにすべてのスペースを利用可能にするのではなく、何かを要求するのですか?

答えて

3

私はこの同じ問題を抱えていました。私が修正したのは、実行時にWindowsFormsHost内のコントロールのサイズを変更することでした。

私の場合は、コントロールをホストするためにStackPanelを使用しました。実行時に、WindowsFormsHost内のコントロールの高さと幅をStackpanelの高さと幅に設定しました。 ActualHieightプロパティとActualWidthプロパティを使用します。

残念ながら、サイズ変更イベントには、ウィンドウのサイズを変更するたびに変更する必要がありました。

19

私は良い答えを見つけました。

LastChildFill = trueを指定してdockPanelを使用し、WindowsフォームコントロールをStrechに水平方向と垂直方向に配置し、WindowsFormsコントロールに入力する必要があります。

<DockPanel LastChildFill="true"> 
    <WindowsFormsHost HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Panel Dock=Fill /> 
    </WindowsFormsHost> 
</DockPanel> 

私は同様の問題のいくつかの並べ替えを持っていた、」

2

をお楽しみください。私はwinFormフォームから最小と最大の高さと幅の設定を削除して、私の問題を修正することができました。

その後、私はykatchouのようにDockPanelを使用しました。私はまだDPIにいくつかの問題がありますが、私はDPIが大したことではないと思います。醜いですが、動作しています

4

同じ問題がここにあります。私が行ったことは、親ホスト(WindowsFormHostなど)のディメンション(幅と高さ)にWindowsFormコントロール(埋め込む必要がある)のサイズをバインドすることです。以下のコードを参照してください。これは、Windowsフォームがロードされた後に行われる:

UserWinFormControlは、XAMLの書き込みではWindowsFormHost が主催埋め込まれる制御/ある
private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    UserWinFormControl.Height = UserWinFormControl.Parent.Height; 
    UserWinFormControl.Width = UserWinFormControl.Parent.Width; 

} 

<Window x:Class="myAppWpf.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
     Title="MyApp" 
     Height="737" 
     Width="1024" 
     WindowStartupLocation="CenterScreen" 
     Loaded="Window_Loaded"> 
     <......> 
     <DockPanel LastChildFill="true"> 
         <WindowsFormsHost Name="windowsFormsHost1"DockPanel.Dock="Top" 
              Background="Yellow"   
              HorizontalAlignment="Stretch"    
              VerticalAlignment="Stretch" > 
         </WindowsFormsHost> 
     </DockPanel> 
     </....> 
</Window> 

すべての作業をされて罰金なしがちらつきますアプリのサイズを変更する。

+1

感謝を使用する - どういうわけか、背景色が劇的にコントロールのちらつきを低減し制御を与えます。 – Justin

4

いくつかの修正点:DockPanelにはLastChildFillがデフォルトで有効になっており、水平および垂直のアライメントも自動的に伸びるように設定されています。

だから、簡潔な答えは次のとおりです。DockPanel

<DockPanel> 
    <WindowsFormsHost> 
    </WindowsFormsHost> 
</DockPanel> 
関連する問題