.net 窗口显示前如何计算实际宽度实际高度
我试图在窗口显示之前(例如在窗口构造函数中)计算.net 窗口显示前如何计算实际宽度实际高度,.net,wpf,window,measure,actualwidth,.net,Wpf,Window,Measure,Actualwidth,我试图在窗口显示之前(例如在窗口构造函数中)计算堆栈面板宽度,高度(位于网格的中间单元格)。如何实现这一目标 <Window x:Class="WpfApplication2.TestWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="TestWin
堆栈面板宽度,高度(位于网格的中间单元格)。如何实现这一目标
<Window x:Class="WpfApplication2.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestWindow" Height="300" Width="300">
<Grid Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="1" Grid.Column="1" Name="stackPanel"></StackPanel>
</Grid>
编辑1
FixedPage的以下工作:
fixedPage.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
fixedPage.Arrange(new Rect(0, 0, fixedPage.DesiredSize.Width, fixedPage.DesiredSize.Height));
然后我们可以访问stackPanel.ActualWidth
和stackPanel.ActualHeight
但对于窗口,它不起作用。请尝试加载的事件:
public TestWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(TestWindow_Loaded);
}
void TestWindow_Loaded(object sender, RoutedEventArgs e)
{
//this.DesiredSize shouldnt be {0,0} now
}
EDIT:由于StackPanel
已经占据了最大的Size
,即使没有项目,它的SizeChanged
事件也只会在您添加了很多项目的情况下被触发,因此您可以像这样使用StackPanel
的SizeChanged
事件:
private void spTest_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (!(e.PreviousSize.Height == 0 && e.PreviousSize.Width == 0)) //will also be fired after loading
{
//Create another Page
}
}
EDIT2:另一种可能的解决方案:
public MainWindow()
{
InitializeComponent();
yourStackPanelName.Loaded += new RoutedEventHandler(yourStackPanelName_Loaded);
}
void yourStackPanelName_Loaded(object sender, RoutedEventArgs e)
{
double height = ((StackPanel)sender).ActualHeight;
double width = ((StackPanel)sender).ActualWidth;
}
它适用于窗口,但此处的窗口仅为示例。我需要在FixedPage中放置网格,我必须找到stackPanel的尺寸作为此页面的内容区域-这有助于回答我可以放入多少项。。。对于我定义的每个项目,现在是高度,然后到达页面末尾,我需要创建另一个页面,依此类推……为什么需要设置StackPanel的高度和宽度?没有项目的Stackpanel始终采用其父区域的高度和宽度,因此您不需要通过代码设置这些。我希望未设置高度和宽度,并且如之前所述,我需要此项来确定Stackpanel中可能存在的项目数。如果我把更多的东西放进去,它们在FixedPagethank中是看不见的,但这不适合我。。。。每次您将DocumentViewer滚动到带有已加载事件的FixedPage时,它都将被执行……也许您应该发布更多的程序代码,以便我们知道什么适合您。
public MainWindow()
{
InitializeComponent();
yourStackPanelName.Loaded += new RoutedEventHandler(yourStackPanelName_Loaded);
}
void yourStackPanelName_Loaded(object sender, RoutedEventArgs e)
{
double height = ((StackPanel)sender).ActualHeight;
double width = ((StackPanel)sender).ActualWidth;
}