UWPでは、グリッドコントロールは通常、親コンテナに合わせて自動的にサイズ変更されます。
ただし、テキストボックスの高さと幅が設定されているため、親グリッドのサイズが変更されたときにサイズ変更されません。
説明したシナリオでは、画面サイズが変更されたときに更新されるScreenHeightプロパティとScreenWidthプロパティをビューモデルに追加しました。次に、サイズを変更したいコントロールの高さ/幅をそのプロパティにバインドすることができます。ここではサンプル実装です:
あなたのXAMLファイル:
<Page x:Name="mainPage"
x:Class="YourApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:YourApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:YourApp.ViewModels"
SizeChanged="MainPage_SizeChanged">
<Page.DataContext>
<vm:ViewModel x:Name="dataContext"/>
</Page.DataContext>
<YourControl Height="{Binding ScreenHeight}" Width="{Binding ScreenWidth}"/>
</Page>
あなたのViewModel
public class ViewModel: INotifyPropertyChanged
{
private double _screenWidth;
private double _screenHeight;
public double ScreenWidth { get { return _screenWidth; } set { _screenWidth = value; OnPropertyChanged("ScreenWidth"); } }
public double ScreenHeight { get { return _screenHeight; } set { _screenHeight = value; OnPropertyChanged("ScreenHeight"); } }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
グリッドのSizeChangedにイベントハンドラを登録した後
private void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)
{
dataContext.ScreenHeight = this.ActualHeight;
dataContext.ScreenWidth = this.ActualWidth;
}
の後ろにあなたのコードMainPage.xaml.csでは新しいサイズを正しく更新できました。私はコーディングの初心者ですが、SizeChangedのグリッドにイベントハンドラを登録しながら、MVVMパターンを尊重する方法はありますか? –