動作環境
Windows 8.1 Pro (64bit)
Microsoft Visual Studio 2017 Community
c++ Builder > form > フォームの大きさをコードで拡大する > this->ScaleBy(120,100);
の処理をWPFではどのように実装するか。
処理
以下とした
- XAMLにてSizeToControl="WidthAndHeight"を設定
- XAMLにてViewboxを使用
- 中にGrid(Height, Width固定)を使用
- 中にコントロールを配置する
- 中にGrid(Height, Width固定)を使用
- code behindにおいてViewboxの(Height, Width)を変更する
参考
- https://stackoverflow.com/questions/1417004/how-to-relative-scale-size-of-user-control
- Visual Studio | WPF > 実装: デザイン時と実行時のウィンドウサイズの違いの対策 > XAML対応
code
MainWindow.xaml
<Window x:Class="_171225_t1400_scaleBy.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:local="clr-namespace:_171225_t1400_scaleBy"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
SizeToContent="WidthAndHeight">
<!-- SizeToContent を指定した-->
<Viewbox Name="VWB_outer"
StretchDirection="Both" Stretch="Uniform"
Height="320" Width="515">
<Grid Height="320" Width="515">
<Button Name="Button1"
Content="Button" Height="30" Click="Button_Click"/>
<Label Content="Label" HorizontalAlignment="Left" Margin="28,36,0,0" VerticalAlignment="Top"/>
<CheckBox Content="CheckBox" HorizontalAlignment="Left" Margin="111,47,0,0" VerticalAlignment="Top"/>
<RadioButton Content="RadioButton" HorizontalAlignment="Left" Margin="312,37,0,0" VerticalAlignment="Top"/>
<RadioButton Content="RadioButton" HorizontalAlignment="Left" Margin="312,69,0,0" VerticalAlignment="Top"/>
</Grid>
</Viewbox>
</Window>
MainWindow.xaml.cs
using System.Windows;
namespace _171225_t1400_scaleBy
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
static bool s_bfEnlarged = false; // 拡大済かどうか
public MainWindow()
{
InitializeComponent();
}
static readonly double kScaleFactor = 1.5;
private void Button_Click(object sender, RoutedEventArgs e)
{
if (s_bfEnlarged)
{
VWB_inner.Height = VWB_inner.Height / kScaleFactor;
VWB_inner.Width = VWB_inner.Width / kScaleFactor;
s_bfEnlarged = false;
} else {
VWB_inner.Height = VWB_inner.Height * kScaleFactor;
VWB_inner.Width = VWB_inner.Width * kScaleFactor;
s_bfEnlarged = true;
}
}
}
}