我的xml代碼:
<Grid>
<Interactivity:Interaction.Behaviors>
<Interactions:EventTriggerBehavior EventName="SizeChanged">
<Interactions:InvokeCommandAction Command="{Binding OnSizeChanged}"/>
</Interactions:EventTriggerBehavior
</Grid>
在視圖模型中:
public IRelayCommand OnSizeChanged => new RelayCommand(SizeChangedEvent);
private void SizeChangedEvent()
{
// How to receive width and height at here
}
所以我的問題是如何在視圖模型中接收高度和高度?
謝謝
uj5u.com熱心網友回復:
您可以使用CommandParameter
屬性和值轉換器。
XAML:
<Grid x:Name="grid">
<Interactivity:Interaction.Behaviors>
<Interactions:EventTriggerBehavior EventName="SizeChanged">
<Interactions:InvokeCommandAction Command="{Binding OnSizeChanged}">
<Interactions:InvokeCommandAction.CommandParameter>
<Binding ElementName="grid">
<Binding.Converter>
<local:SizeConverter />
</Binding.Converter>
</Binding>
</Interactions:InvokeCommandAction.CommandParameter>
</Interactions:InvokeCommandAction>
</Interactions:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Grid>
轉換器:
public class SizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language) =>
value is FrameworkElement fe ? (fe.ActualWidth, fe.ActualHeight) : (double.NaN, double.NaN);
public object ConvertBack(object value, Type targetType, object parameter, string language) =>
throw new NotSupportedException();
}
查看型號:
public IRelayCommand OnSizeChanged => new RelayCommand<(double, double)>(SizeChangedEvent);
private void SizeChangedEvent((double width, double height) size)
{
//...
}
uj5u.com熱心網友回復:
Canvas 不能有sizechanged
事件,因為 Canvas 使用絕對定位作為其包含的子元素的布局技術。如檔案所述
因為絕對定位不考慮應用程式視窗的大小、縮放或其他用戶選擇的大小,所以使用適應不同方向和螢屏設定的容器元素,例如 Grid 或 StackPanel,通常是比使用更好的選擇帆布。有關詳細資訊,請參閱使用 XAML 定義布局。
編輯:(基于評論)
對于 Grid,您可以直接將sizechanged
事件系結到 ViewModel 中的事件處理程式,如下例所示
Xaml
<Grid SizeChanged="{x:Bind viewModel.Grid_SizeChanged,Mode=OneWay}">
</Grid>
Xaml.cs
ViewModel viewModel { get; set; } = new ViewModel();
public MainPage()
{
this.InitializeComponent();
}
視圖模型.cs
public class ViewModel
{
public void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
var height = (sender as Grid).ActualHeight;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491389.html
上一篇:我為我的UWP應用程式構建了一個控制元件,我需要社區工具包的Expander控制元件,但我遇到了這個錯誤:XDG0066Unspecifiederror
下一篇:.netMauiReleaseCandidate3中的ContentPageBackgroundColor損壞?