C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WPF上でのWindowsFormsユーザーコントロール


(過去ログ 126 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■74904 / inTopicNo.1)  WPF上でのWindowsFormsユーザーコントロール
  
□投稿者/ sima (1回)-(2015/02/08(Sun) 20:12:24)

分類:[C#] 

こんにちは。

.Net FrameWork4、C#を使用しています。

WPFアプリケーションに、Windows.Formsアプリケーションで作成した既存のユーザーコントロールを追加しました。
機能は正常に動作させることができたのですが、
ユーザーコントロールが、WPF内で間延びして表示されてしまいます。

たとえば、ユーザーコントロール内のボタンが、縦に1.3倍、横に1.1倍ほど間延びします。

レイアウトの設定が間違っているのかといろいろ試しましたが、変化がありません。
ネット上を検索してみましたが、同様の例がなく、基本的なところで間違っているのかもしれませんが…。

xamlの具体的なサンプルコードを、下記に置きました。
おわかりになる方、ご助力願えないでしょうか。
-----
(MainWindow.xaml)

<Window xmlns:my="clr-namespace:WpfApplication2"  x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="300" Width="300"
        xmlns:mylib="clr-namespace:WindowsFormsApplication2;assembly=WindowsFormsApplication2"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">

    <Canvas Grid.Row="0" Grid.Column="0">
        <WindowsFormsHost Background="Yellow" Width="100" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center">
            <mylib:UserControl1 Text="Windows Forms control" Width="100" Height="100" />
        </WindowsFormsHost>
    </Canvas>
</Window>
-----





引用返信 編集キー/
■74930 / inTopicNo.2)  Re[1]: WPF上でのWindowsFormsユーザーコントロール
□投稿者/ Hongliang (276回)-(2015/02/10(Tue) 12:20:12)
WinFormのコンテナ系コントロールには、AutoScaleModeというプロパティがあります。
https://msdn.microsoft.com/ja-jp/library/ms229605.aspx
デザイナの初期値ではAutoScaleMode.Fontなので、フォントに依存して座標類が変換されます。
UserControlのフォントが未設定の場合、デザイン時はWinFormの標準であるMS UI Gothicを、実行時は親要素から引き継いだメイリオを使うため、座標変換が発生してそのような状況になっているのでしょう。
・UserControlのFontを明示的に設定する
・UserControlのAutoScaleModeをDpiに設定する
・WindowsFormsHost(やその先祖)のFontFamilyやFontSizeをWinForm標準のと同じにする
 (フォントサイズの単位がWinFormとWPFで違いますが)
のいずれかを行えば、とりあえずサイズが変に拡大されると言うことは無くなるでしょう。

// もう一つ、WindowsのDPI設定による影響ってのもあるんですが……。
引用返信 編集キー/
■74998 / inTopicNo.3)  Re[2]: WPF上でのWindowsFormsユーザーコントロール
□投稿者/ shima (1回)-(2015/02/16(Mon) 20:25:20)
No74930 (Hongliang さん) に返信

ありがとうございました!
仰るとおり、AutoScaleMode.FontをNoneにすることで、間延びする問題が解決しました。
ただ、やはりWPFのコントロールの中では違和感のある表示になってしまい、
急遽WPF用のコントロールに書き換えました。

ネットであまり情報がないのは、この辺が理由かもしれませんね・・・;
今後も置き換える時間がないときなどは、この方法で埋め込むこともあると思います。
大変たすかりました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -