如何从 DockPanel 获取高度和宽度?

Posted

技术标签:

【中文标题】如何从 DockPanel 获取高度和宽度?【英文标题】:How do I get the height and width from a DockPanel? 【发布时间】:2019-12-26 06:19:46 【问题描述】:

我正在使用 DockPanel 来托管一些图像增强控件。要增强的图像位于“中心”停靠位置。我想让图像填满 DockPanel 的整个区域。我有一个实现 WPF Canvas 控件并将 windows.Rect 作为输入的自定义类。此 Rect 将为我已覆盖的图像渲染功能设置区域。

我已尝试获取 DockPanel.ActualHeight 和 .ActualWidth。两者都是 NaN 和 DockPanel.Width 和 Height = 0。

    public MainWindow()
    
        ImageDataModel = new ImageDataModel();
        DataContext = ImageDataModel;
        InitializeComponent();
        WindowState = WindowState.Maximized;
        var tmpWindow = Window.GetWindow(BaseDockPanel);
        Rect rect = new Rect(0, 0, BaseDockPanel.ActualWidth, BaseDockPanel.ActualHeight);
        bitmapCanvas = new BitMapCanvas(rect);
        BaseDockPanel.Children.Add(bitmapCanvas);
    

我希望能够创建一个 windows.Rect,它是 DockPanel.center 高度和宽度的实际尺寸。目前控件的高度和宽度为0。

【问题讨论】:

【参考方案1】:

MainWindow 的构造点,Window 中的子控件,在您的情况下为BaseDockPanel,尚未加载。

这就是为什么 ActualWidthActualHeight 得到 0。

您可以为Window的Loaded事件添加一个EventHandler,如下所示。

public MainWindow()

    ImageDataModel = new ImageDataModel();
    DataContext = ImageDataModel;
    InitializeComponent();
    WindowState = WindowState.Maximized;

    this.Loaded += Window_Loaded;


private void Window_Loaded(object sender, RoutedEventArgs e)

    var tmpWindow = Window.GetWindow(BaseDockPanel);
    // You will get your ActualWidth and ActualHeight here.
    Rect rect = new Rect(0, 0, BaseDockPanel.ActualWidth, BaseDockPanel.ActualHeight);
    bitmapCanvas = new BitMapCanvas(rect);
    BaseDockPanel.Children.Add(bitmapCanvas);

【讨论】:

以上是关于如何从 DockPanel 获取高度和宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何从base64图像数据字符串中同步获取宽度和高度?

如何从 linux 命令行获取视频文件的分辨率(宽度和高度)?

php yii - 如何从 yii 图像组件获取图像宽度和高度属性 [关闭]

如何从你的 href 中获取原始尺寸的图像(高度和宽度)并将它们放在你的 attr 上。使用 jQuery

从字节数组数据中获取图像宽度和高度

如何在 Adob​​e Animate CC 中使用舞台宽度和高度(Canvas doc)