在UWP,所述網格控件通常會自動調整以適應它的父容器中。然而
你的文本框有一組高度和寬度,這將阻止它,當它的父網格大小調整。
在您所描述的場景中,我實現了加入ScreenHeight和屏幕寬度屬性當屏幕尺寸改變時更新我的視圖模型一個解決方法。然後,你可以將你想調整大小的任何控件的高度/寬度綁定到這些特性。下面是一個簡單的實現:
您的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>
您的視圖模型
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));
}
}
}
後面的代碼
private void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)
{
dataContext.ScreenHeight = this.ActualHeight;
dataContext.ScreenWidth = this.ActualWidth;
}
註冊事件處理程序到網格的SizeChanged將後在MainPage.xaml.cs中,我能夠正確更新新的大小。我是一個編程初學者,有沒有辦法仍然尊重MVVM模式,同時註冊一個事件處理程序到SizeChanged的網格? –