我有一个WPF用户控件,我们将其命名为MyControl,它具有包含一些Drawing Visuals和包含在另一个网格内的同一网格的网格。 MyControl的宽度和高度绑定到UserControl的Width和Height属性。并且UserControl包含其中包含Drawing Visual的网格。NaN大小的网格
然后我有另一个WPF用户控件创建N的MyControl并将它们放置在Dock Panel中。
我面临的问题是,无论何时访问MyControl的宽度和高度属性,它们实际上都是NaN。
以下是我DockPanel中声明:
<DockPanel x:Name="layout" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
</DockPanel>
的其他控件在运行时初始化。这可能是导致这种情况发生的原因。另外还有一些奇怪的地方 - 每当我用它作为单个控件时,MyControl似乎都能正常运行,但每当我尝试使用包含N个控件的控件时,事件似乎都会变得混乱起来。
难道是因为绑定还没有发生?事实上,绑定实际发生时,我可以肯定他们是绑定?
Container = new Container(Data);
Container.SetBinding(Grid.WidthProperty, new Binding("Width") { Source = this });
Container.SetBinding(Grid.HeightProperty, new Binding("Height") { Source = this });
grid.Children.Add(Container);
myControl.AddChild(grid);
下面是我如何将内部网格绑定到UserControl的大小。
我解决我的问题,通过容器的类网格结合这样的用户控件的实际宽度属性:
Container.SetBinding(Grid.WidthProperty, new Binding("ActualWidth") { Source = this });
Container.SetBinding(Grid.HeightProperty, new Binding("ActualHeight") { Source = this });
像现在这样。
因此,我假设我可以使用ActualWidth和ActualHeight在网格实例化和绑定正确后? – Hristo 2015-02-10 10:19:31
@Chris号您需要让应用程序“运行”第二次,以便WPF进行布局。在此之后发生OnLoaded事件。现在我不能说出其他可能用于类似事情的事件。 – Euphoric 2015-02-10 10:23:05