【发布时间】:2019-10-29 23:04:13
【问题描述】:
我有一个简单的 UWP 应用,定义如下:
using System;
using System.Diagnostics;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace SizeChangedBug
{
public sealed partial class MainPage : Page
{
public MainPage() {
this.InitializeComponent();
this.Rectangle.SizeChanged += Rectangle_SizeChanged;
}
private void Rectangle_SizeChanged(object sender, SizeChangedEventArgs e) {
Debug.WriteLine("Rectangle_SizeChanged");
}
}
}
<Page
x:Class="SizeChangedBug.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SizeChangedBug"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Canvas>
<Slider x:Name="Slider" Orientation="Vertical" Width="80" Height="300" Value="400" Minimum="0" Maximum="600" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Rectangle x:Name="Rectangle" Margin="200,200" Width="{Binding Value, ElementName=Slider}" Height="{Binding Value, ElementName=Slider}" Fill="Red" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Canvas>
</Page>
问题是 SizeChanged 永远不会触发,并且 Rectangle_SizeChanged 永远不会在 Rectangle 的大小发生变化时被调用。我错过了什么还是 UWP 中的错误?下面的 XAML 将 Canvas 替换为 Grid 作品。
<Page
x:Class="SizeChangedBug.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SizeChangedBug"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Slider x:Name="Slider" Orientation="Vertical" Width="80" Height="300" Value="400" Minimum="0" Maximum="600" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<Rectangle x:Name="Rectangle" Margin="200,200" Width="{Binding Value, ElementName=Slider}" Height="{Binding Value, ElementName=Slider}" Fill="Red" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
</Page>
【问题讨论】:
-
您好,很抱歉回复晚了,我们仍在研究您的问题。但也许你可以告诉我们你为什么在这里使用
SizeChanged事件?了解这一点有助于我们提供更好的解决方案。建议您使用Transform,这将比使用Transform更流畅,而不是修改Width/Height。 -
嗨@RichardZhang-MSFT,Transform 会触发 SizeChanged 吗?解决方案在这里发布非常复杂,因此我将其提炼成一个简单的示例,应该易于理解/调试。