<UserControl x:Class="Jims.View.Settings.Settings" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="SettingsWindow"> <Border Style="{StaticResource WindowBorderStyle}" Height="100"> <StackPanel Orientation="Vertical"> <my:TitleBar Title="settings"/> <StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal"> <StackPanel Orientation="Vertical" Margin="10,0"> <Label>Theme :</Label> </StackPanel> <StackPanel Orientation="Vertical" Width="200" Margin="0,10,0"> <ComboBox Name="cmbTheme" ItemsSource="{Binding Path=Themes}" ></ComboBox> </StackPanel> </StackPanel> </StackPanel> </StackPanel> </Border> </UserControl>
这是我的UserControl,我没有设置其宽度和高度属性.
但在一些代码隐藏中,我想得到这个UserControl的高度和宽度,我无法得到它们.
double width=uctrl.Width;
它给了我NaN
double width=ctrl.ActualWidth;
给我0
我需要宽度和高度的代码
private void OpenChild(UserControl ctrl) { bool alreadyExist = false; ctrl.Uid = ctrl.Name; foreach (UIElement child in JimsCanvas.Children) { if (child.Uid == ctrl.Uid) { alreadyExist = true; Canvas.SetZIndex(child,GetMaxZIndex); } } if (!alreadyExist) { JimsCanvas.Children.Add(ctrl); JimsCanvas.InvalidateMeasure(); double top = (JimsCanvas.ActualHeight - ctrl.Height) / 2; double left = (JimsCanvas.ActualWidth - ctrl.Width) / 2; Canvas.SetLeft(ctrl,left); Canvas.SetTop(ctrl,top); } }
解决方法
在一个全新的项目中我写了这个(它在更改窗口时给了我更新的宽度):
<Window xmlns:my="clr-namespace:WpfApplication2" x:Class="WpfApplication2.Window32" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window32" Height="300" Width="300"> <Grid> <my:UserControl3 x:Name="uc3" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="126,121,0" Name="textBlock1" Text="{Binding ElementName=uc3,Path=ActualWidth}" VerticalAlignment="Top" /> </Grid> </Window>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。