- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据文档“(FrameworkElement.SizeChanged) 当此元素上的 ActualHeight 或 ActualWidth 属性值更改时发生。”
运行以下测试方法,我的矩形的 ActualWidth 和 ActualHeight 在调用 Measure 和 Arrange 后更新,但从未引发 SizeChanged RoutedEvent。
[Test]
[RequiresSTA]
public void Test_Something()
{
bool sizeChangedRaised = false;
var r = new Rectangle { Width = 10, Height = 10 };
r.Measure(new Size(20, 20));
r.Arrange(new Rect(0, 0, 20, 20));
//r.ActualWidth and r.ActualHeight are both 10 at this point.
r.SizeChanged += (s, e) => sizeChangedRaised = true;
r.Width = 5;
r.Height = 5;
r.Measure(new Size(20, 20));
r.Arrange(new Rect(0, 0, 20, 20));
//r.ActualWidth and r.ActualHeight are now both 5.
Assert.That(sizeChangedRaised);// false
}
谁能解释一下为什么 SizeChanged 没有被引发?
有什么方法可以设置它以使其升高吗?
解决方案
此测试通过了 H.B. 的静态类:
[Test]
[RequiresSTA]
public void Test_Something()
{
bool sizeChangedRaised = false;
var r = new Rectangle { Width = 10, Height = 10 };
r.Measure(new Size(20, 20));
r.Arrange(new Rect(0, 0, 20, 20));
r.SizeChanged += (s, e) => {
sizeChangedRaised = true;
};
r.Width = 5;
r.Height = 5;
r.Measure(new Size(20, 20));
r.Arrange(new Rect(0, 0, 20, 20));
ThreadEx.Wait(1000);
Assert.That(sizeChangedRaised);
}
static class ThreadEx
{
public static void Wait(int millisecondsTimeout)
{
Wait(TimeSpan.FromMilliseconds(millisecondsTimeout));
}
public static void Wait(TimeSpan timeout)
{
var frame = new DispatcherFrame();
new Thread(() =>
{
Thread.Sleep(timeout);
frame.Continue = false;
}).Start();
Dispatcher.PushFrame(frame);
}
}
最佳答案
矩形由 UI 线程管理,它以排队方式执行操作,如果您只是设置断点或显示 MessageBox,则 SizeChanged
在执行完整方法后很长时间内会触发设置一个 bool 值时,你会看到它确实被触发了。
编辑:我将如何测试它;只需提前添加一些延迟即可:
ThreadEx.Wait(1000);
Assert.That(sizeChangedRaised);
static class ThreadEx
{
public static void Wait(int millisecondsTimeout)
{
Wait(TimeSpan.FromMilliseconds(millisecondsTimeout));
}
public static void Wait(TimeSpan timeout)
{
var frame = new DispatcherFrame();
new Thread((ThreadStart)(() =>
{
Thread.Sleep(timeout);
frame.Continue = false;
})).Start();
Dispatcher.PushFrame(frame);
}
}
关于wpf - 为什么此代码中没有引发 FrameworkElement.SizeChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6851817/
在 Windows 应用商店应用中,我们需要一个在设备方向改变时发生的事件。我发现了两个事件,有人知道它们之间有什么区别吗? Windows.UI.Core.CoreWindow.GetForCurr
根据文档“(FrameworkElement.SizeChanged) 当此元素上的 ActualHeight 或 ActualWidth 属性值更改时发生。” 运行以下测试方法,我的矩形的 Actu
我需要使用 Windows Chart 的 SizeChanged 事件,以便在用户重新调整表单时以正确的比例重新绘制。 但是当用户调整表单大小时(通常,通过拖动表单的边框),这个事件被触发了很多次,
我是 WPF 的新手 我想检测主窗口大小何时发生变化(通过鼠标抓握),但是在应用程序启动时加载主窗口之前事件被触发。怎么会这样? private void Window_SizeChanged
这是一个有点菜鸟的问题。 基本上,我的 WPF 窗口中有一个网格 MainGrid 我只是想在 MainGrid 调整大小时(当用户最大化/调整窗口大小时)收到通知。 目前这没有任何作用。我是否应该在
我的一个窗口中有一个 SizeChanged 事件。其中一个用户控件 Width 的行为很有趣,因此我决定在 SizeChanged 事件中静态设置窗口的宽度。问题是,当我在大小更改事件中设置窗口大小
当使用 SizeChanged 更改窗体大小时,我试图更新我的控件。 它运行完美,除了全屏时。 我搜索了网格事件,但找不到在用户最大化窗口(全屏)时发生的任何事件。 最佳答案 我能够在最大化时收到 S
我有在 HubSection 中使用的 DataTemplate:
在 C# .Net 中,在 Winforms 中,我在几乎所有组件中都发现了两个事件,Resize() 和 SizeChanged()。它们之间有什么区别吗?如果两个事件相同,那么为什么 C# 提供了
我遇到了一些奇怪的行为。当我调整快照 View 大小时,我的 Windows 应用商店应用程序(针对 8.0)没有收到 SizeChanged 事件。应用程序保持相同的大小,只是在 View 中居中。
各位程序员大家好, 我制作了一个相当复杂的 WPF 应用程序,其中包含数据绑定(bind)数据网格和其他内容。由于内容动态变化,窗口本身也会调整大小(正如它应该做的那样)。我做了一个函数,当尺寸改变时
我正在尝试在 UWP 上更改窗口大小 (Window.Current.SizeChanged) 时更改 GridViewItem 的宽度属性。
我是一名优秀的程序员,十分优秀!