c# - 绑定(bind)到 MainView 窗口的 Width 属性时出现绑定(bind)错误

标签 c# wpf data-binding

我有一个 MainView 窗口,我试图从它的代码隐藏类绑定(bind)它的宽度和高度。

<Window x:Class="RpP25.MainView"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:shared="http://schemas.actiprosoftware.com/winfx/xaml/shared"     
   xmlns:docking="http://schemas.actiprosoftware.com/winfx/xaml/docking"
   xmlns:themes="http://schemas.actiprosoftware.com/winfx/xaml/themes"
   xmlns:RpWin="clr-namespace:RpP25"
   xmlns:RpWinCmds="clr-namespace:RpP25.Commands"
   xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
   Title="{Binding Path=FileName, Converter={StaticResource WindowTitleNameConverter}}"
   Height="{Binding Path=WindowHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
   Width="{Binding Path=WindowWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
   Icon="images/CobWhite.ico"
   Loaded="Window_Loaded"
   Closing="Window_Closing">

背后的代码具有属性,并且还通过 ViewModel MainVM 将数据上下文设置为。

public partial class MainView : Window, INotifyPropertyChanged
{
    // Constant Fields
    private const double windowDefaultWidth_ = 720;
    private const double windowDefaultHeight_ = 400;

    // Private Fields
    private RegistryKey RegKey_;                                // Registry Key to hold Registry Subkey
    private WindowState windowState_ = WindowState.Normal;   // Display State of the MainWindow (Min,Max or Normal)
    private double windowWidth_ = windowDefaultWidth_;    // Width of the MainWindow
    private double windowHeight_ = windowDefaultHeight_;  // Height of the MainWindow

    #region Constructors

    public MainView()
    {
        InitializeComponent();
        DataContext = new MainVM();

        // Get the state of the window and the width/height from the registry
        ReadRegistryValues();

    /// <summary>
    /// Gets the Width of the Window
    /// </summary>
    public double WindowWidth
    {
        get { return windowWidth_; }
        set { windowWidth_ = value; NotifyPropertyChanged("WindowWidth"); }
    }

    /// <summary>
    /// Gets the Height of the Window
    /// </summary>
    public double WindowHeight
    {
        get { return windowHeight_; }
        set { windowHeight_ = value; NotifyPropertyChanged("windowHeight"); }
    }

    ...
}

这个窗口是从 App::OnStartup() 创建的。

当我运行代码时,调试器在输出窗口中抛出以下错误。

Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:Path=WindowHeight; DataItem=null; target element is 'MainView' (Name=''); target property is 'Height' (type 'Double')

WindowWidth 也是类似的。

我以为我了解绑定(bind)模式,但我想我错了:(

我在想,使用 FindAncestor 查找窗口会导致它查找可视化树,直到找到具有我的属性的 MainView 窗口。

如有任何帮助,我们将不胜感激。

最佳答案

尝试

Width="{Binding Path=WindowWidth, RelativeSource={RelativeSource Self}}"

Codebehind 与您的窗口元素相同。所以使用Self binding。

关于c# - 绑定(bind)到 MainView 窗口的 Width 属性时出现绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8846522/

相关文章:

c# - 如何在wpf中的tabitem上制作标签拉伸(stretch)

c# - 循环遍历 RectangleShape 控件

python - 如何实现对象属性的两个方向

c# - 从 itextsharp 注释弹出一个窗口显示图像和文本

c# - WPF - 如何将组合框选择的值添加到数据库

c# - 动画列表框中的已删除项目

c# - 如何在 WPF C# 中更改 slider 上刻度的设计(刻度的厚度、刻度的形状等...)

c# - 如何提示一个新窗口显示所选项目的模型数据?

android - 数据绑定(bind)适用于多个 Activity/fragment 使用的一种布局

c# - 无效操作异常 : Cannot consume scoped service 'Microsoft.JSInterop.IJSRuntime' from singleton '...IAuthentication' in Blazor