概要
WPFにはNumericUpDownは無いので、WindowsFormsHostを利用してFormアプリのコントロールを使用する。
以下を参照追加します。
・System.Windows.Forms
・WindowsFormsIntegration
XAMLにNamespaceを追加します。
xmlns:wfc=”clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms”
(“wfc”)の表記は任意の文字で可能です。
ツールボックスから「WindowsFormsHost」をドラッグするか、XAMLに手打ちでWindowsFormsHostのタグを入力します。
WindowsFormsHostタグの子階層でFormアプリのコントロールを呼び出します。
コード
XAML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<Window x:Class="NumericUpDown.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wfc="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" xmlns:local="clr-namespace:NumericUpDown" mc:Ignorable="d" Title="MainWindow" Height="222" Width="327.5"> <Grid> <StackPanel> <!--WindowsFormsHostのWidth, Height 両方指定--> <!-- NumericUpDownはWidth, Height指定する(WindowsFormsHostのサイズより大きい) --> <WindowsFormsHost Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="16" Background="Orange"> <wfc:NumericUpDown x:Name="Spin1" x:FieldModifier="public" Maximum="65535" Minimum="1" ReadOnly="False" Width="122" Height="50" Margin="10,10,0,0"/> </WindowsFormsHost> <!--WindowsFormsHostのWidth, Height 指定しない --> <!-- NumericUpDownはWidth, Height指定する --> <WindowsFormsHost Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Orange"> <wfc:NumericUpDown x:Name="Spin2" x:FieldModifier="public" Maximum="65535" Minimum="1" ReadOnly="False" Width="122" Height="50" Margin="10,10,0,0"/> </WindowsFormsHost> <!--WindowsFormsHostのWidth, Height 両方指定--> <!-- NumericUpDownはWidth, Height指定する(WindowsFormsHostのサイズより小さい) --> <WindowsFormsHost Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="50" Background="Orange"> <wfc:NumericUpDown x:Name="Spin3" x:FieldModifier="public" Maximum="65535" Minimum="1" ReadOnly="False" Width="122" Height="100"/> </WindowsFormsHost> <!--WindowsFormsHostのWidth, Height 両方指定 Widthをさらに広く。--> <!-- NumericUpDownはWidth, Height指定する(WindowsFormsHostのサイズより小さい) --> <WindowsFormsHost Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="300" Height="50" Background="Orange"> <wfc:NumericUpDown x:Name="Spin4" x:FieldModifier="public" Maximum="65535" Minimum="1" ReadOnly="False" Width="122" Height="100" /> </WindowsFormsHost> <TextBlock x:Name="textBlock1" Text="{Binding ElementName=Spin1, Path=Value}" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="16" Width="100" Background="GreenYellow"/> </StackPanel> </Grid> </Window> |
ポイント
windowsFormsHostの利用
WindowsFormsHostを利用してFormアプリのコントロールを使用します。
以下の参照を追加します。
・System.Windows.Forms
・WindowsFormsIntegration
参照の追加は
[プロジェクト]>[参照の追加]をクリックします。
開いた「参照マネージャ」ウィンドウの右上の検索ボックスに、「forms」と入力して検索。
検索結果から
「System.Windows.Forms」
「WindowsFormsIntegration」
にチェックし、[OK]ボタンをクリックします。
XAMLにネームスペース追加。
XAML 6行目:
XAMLのWindowタグに
xmlns:wfc=”clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms”
を追記して、参照するネームスペースを追加します。
(“wfc”)の表記は任意の文字で可能です。
NumericUpDownとWindowsFormsHostのサイズ指定の関係は次の通りです。
[1]
WindowsFormsHost: Width, Height 指定する
NumericUpDown:Width, Height 指定する
サイズ: WindowsFormsHost < NumericUpDown
⇒ コントロールのサイズはWindowsFormsHostに依存。
[2]
WindowsFormsHost:Width, Height 指定しない
NumericUpDownはWidth, Height:指定する
⇒ コントロールのサイズはどちらにも影響を受けない(?)
[3]
WindowsFormsHost:Width, Height 指定する
NumericUpDownはWidth, Height:指定する
サイズ: WindowsFormsHost > NumericUpDown
⇒ コントロールのサイズはWindowsFormsHostに依存。
[4]
WindowsFormsHost:Width, Height 指定する
NumericUpDownはWidth, Height:指定する
サイズ: WindowsFormsHost > NumericUpDown
⇒ コントロールのサイズはWindowsFormsHostに依存。
ツールボックスから「WindowsFormsHost」をドラッグするか、XAMLに手打ちでWindowsFormsHostのタグを入力します。
WindowsFormsHostタグの子供にFormアプリのコントロールを呼び出します。
以下を参照追加は
・System.Windows.Forms
・WindowsFormsIntegration
XAMLにNamespaceを追加
xmlns:wfc=”clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms”
(“wfc”)の表記は任意の文字で可能。
ツールボックスから「WindowsFormsHost」をドラッグするか、XAMLに手打ちでWindowsFormsHostのタグを入力。
WindowsFormsHostタグの子階層でFormアプリのコントロールを呼び出す。
参考
[] 【WPF】なるほど!WindowsFormsHostでWindowsFormのコントロールを使う! | 趣味や仕事に役立つ初心者DIYプログラミング入門
[] WPF で NumericUpDown コントロールを使う その1 [C#編] – Getting a Good Grasp of F# (仮)
コントロールを自作する参考
[] WPFでもNumericUpDownが使いたい、簡単に作りたい – 午後わてんのブログ
他、WindowsFormsHostを使用するときの注意点等の参考
[] WindowsFormsHostを使用したときの描画問題 – Yamakiの日記
1 |
あ |
コメント