17

WindowsフォームコントロールをwpfUserControlでラップしたかった

<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>

高さと幅は自動であることに注意してください。

スタックパネルまたはグリッドコントロールに配置すると、高さが0に設定され、基本的に表示されなくなります。次に、ユーザーはウィンドウのサイズを変更する必要があります(ユーザーコントロールがスペースは必要ないと言ったため、縮小されました。ありがとうございます)。ユーザーがサイズを変更すると、ユーザーが指定した範囲に拡大されます。

だから私の質問は私が間違ったことをしたのですか?ユーザーコントロールに、要求しないのではなく、使用可能なすべてのスペースを使用させるにはどうすればよいですか?

4

5 に答える 5

21

私はより良い答えを見つけます。

DockPanel を LastChildFill=true で使用してから、WindowsFormsHost 内に水平方向と垂直方向の配置をストレッチに配置します。もちろん、WindowsForms コントロールを塗りつぶす必要があります。

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

楽しみ'、

于 2010-09-21T12:26:53.623 に答える
6

いくつかの修正: DockPanel では LastChildFill が既定で有効になっており、水平方向と垂直方向の配置も自動的にストレッチに設定されます。

簡潔な答えは、DockPanel を使用することです。

<DockPanel>
     <WindowsFormsHost>
     </WindowsFormsHost>
</DockPanel>
于 2014-05-12T18:10:31.923 に答える
4

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

 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
    UserWinFormControl.Height = UserWinFormControl.Parent.Height;
    UserWinFormControl.Width = UserWinFormControl.Parent.Width;

 }   

UserWinFormControl は、WindowsFormHost によって埋め込み/ホストされるコントロールです。Xaml では、次のように記述します。

<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>

アプリのサイズを変更しても、すべてが正常に機能しており、ちらつきはありません。

于 2012-01-18T10:55:38.167 に答える
3

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

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

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

于 2009-06-19T14:47:22.803 に答える
2

私はある種の同様の問題を抱えていました。winFormフォームから最小および最大の高さと幅の設定を削除することで、問題を修正することができました。

その後、ykatchouが提案したようにDockPanelを使用しました。DPIにはまだいくつか問題がありますが、それほど重要ではないと思います。醜いですが、機能しています

于 2011-08-17T21:25:52.453 に答える