通过 WPF 和 XAML 以及数据绑定查看设计视图中的 UI 更改吗?

2023-12-24

我刚刚在 XAML 上观看了这段视频,他在其中创建了一个时钟,并注意到他实际上可以在 Xaml 设计视图中看到他在 C Sharp 中所做的所有更改。

33:30 他创建了自己的类:https://youtu.be/Wb-l0e6WYE0?t=2008 https://youtu.be/Wb-l0e6WYE0?t=2008

在 37:10 他绑定到该类:https://youtu.be/Wb-l0e6WYE0?t=2227 https://youtu.be/Wb-l0e6WYE0?t=2227

稍后在 40:17,您实际上可以在设计视图中看到时钟正在滴答作响!

我尝试通过创建一个名为 Ball 的类来实现此目的,该类具有一些属性(如大小),并将这些属性绑定到具有矩形的 Canvas,该矩形具有 EllipseGeometry 剪辑,使其呈圆形。运行应用程序时它工作正常,但设计视图只是白色。

有谁知道他是怎么做到的?

My Code:

主窗口.xaml

<Window x:Class="XamlTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:XamlTest"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
    <Canvas Background="White">
        <Rectangle Height="{Binding Size}" Width="{Binding Size}" Fill="Green" Canvas.Top="40">
            <Rectangle.Clip>
                <EllipseGeometry Center="{Binding EllipseCenter}" RadiusX="{Binding EllipseRadius}" RadiusY="{Binding EllipseRadius}"/>
            </Rectangle.Clip>
        </Rectangle>
    <Button x:Name="button" Content="Button" Width="75" Click="button_Click"/>
</Canvas>

背后代码:

using System.Windows;
namespace XamlTest
{
public partial class MainWindow : Window
{
    Ball TheBall = new Ball();
    public MainWindow()
    {
        InitializeComponent();
        TheBall.Size = 300;
        this.DataContext = TheBall;
    }


    private void button_Click(object sender, RoutedEventArgs e)
    {

        TheBall.Size = TheBall.Size + 40;
    }
}
}

球类:

using System.Windows;
namespace XamlTest
{
class Ball : INotifyPropertyChangedBase
{
    public Ball()
    {
        Size = 50;
    }
    private double _size;
    public double Size
    {
        get
        {
            return _size;
        }
        set
        {
            _size = value;
            EllipseCenter = new Point(_size / 2, _size / 2);
            EllipseRadius = _size / 2;
            OnPropertyChanged("Size");
        }
    }

    private Point _ellipseCenter;
    public Point EllipseCenter
    {
        get
        {
            return _ellipseCenter;
        }
        set
        {

            _ellipseCenter = value;
            OnPropertyChanged("EllipseCenter");
        }
    }

    private double _ellipseRadius;
    public double EllipseRadius
    {
        get {
            return _ellipseRadius;
        }
        set {
            _ellipseRadius = value;
            OnPropertyChanged("EllipseRadius");
        }
    }


}
}

INotifyPropertyChanged 基类:

using System.ComponentModel;
namespace XamlTest
{

public class INotifyPropertyChangedBase : INotifyPropertyChanged
{


    public event PropertyChangedEventHandler PropertyChanged;

    internal void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
}

我还有一个按钮可以增加球的大小!

谢谢您的帮助。


The DataContext允许 XAML 查找要绑定到的类的实例。

然后,XAML 中的绑定允许您绑定到所述类的特定属性。

有两个独立的 DataContext:design time and run time.

要设置design time数据上下文,请参阅:

http://adamprescott.net/2012/09/12/design-time-data-binding-in-wpf/ http://adamprescott.net/2012/09/12/design-time-data-binding-in-wpf/

本质上,当您设置设计时 DataContext 时,WPF 运行时将在后台自动实例化您指向的类的新实例(或者如果是静态的,则简单地指向该类),然后 Visual Studio 设计时设计器将当您编辑 XAML 时,显示类中的实时值。这使得设计变得非常快,因为您可以使用实时数据,并且不必一直运行程序来查看它的外观。

要设置run time数据上下文,请参见ReSharper WPF 错误:“由于未知的 DataContext,无法解析符号“MyVariable”” https://stackoverflow.com/questions/25549826/resharper-wpf-error-cannot-resolve-symbol-myvariable-due-to-unknown-datacont/25549827#25549827。答案描述了如何使用免费的 Snoop 实用程序来检测运行时绑定错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 WPF 和 XAML 以及数据绑定查看设计视图中的 UI 更改吗? 的相关文章

随机推荐

  • Doctrine 2.0 引导程序?

    好的 我已经在文件夹层次结构中找到了 Doctrine php 文件 如下所示 includes Setup php Doctrine Common DBAL ORM Symfony Doctrine php 我的 setup php 有以
  • 在课堂上使用碰撞列表

    我创建了一个类来创建矩形并将它们放入列表中 我不想让它们碰撞 所以我使用 collidelist 但它不起作用 矩形仍在碰撞 我还希望矩形在击中特定点时向下移动并更改 x 位置 我可以做到这一点 但我不确定它是否会阻止碰撞列表工作 请查看下
  • 我如何知道 lambda 表达式何时为空

    我需要以编程方式检查 lambda 表达式中的嵌套属性 函数结果是否为 null 问题在于 null 可能位于任何嵌套子属性中 例子 功能是 public static bool HasNull
  • Oracle DB 表中的第二高值 [重复]

    这个问题在这里已经有答案了 根据表格 USERS user name email balance 如何创建一个查询 返回最多的第二高用户余额高效的 way 我成功地通过查询获取了此记录 但不是通过有效的方式 SELECT FROM SELE
  • 每月重新加载 servlet 一次

    如何每月重新加载一次 servlet 我们得到了一些每月会改变一次的数据 这些数据是给servlet的 但是我们不需要将这些数据保存到DB中 而是希望将其做成一个每月更换一次的配置文件 怎么办我做这个 我知道servlet的生命周期策略是由
  • 如何使用 SQLAlchemy + postgreSQL 减少连接数?

    我正在开发heroku使用他们的Postgres开发计划的附加组件 其连接限制为20 我是新来的python这可能是微不足道的 但我发现很难在不导致OperationalError OperationalError FATAL too ma
  • Chart.js 无法创建图表:无法从给定项目获取上下文

    我从未进入过节点 所以我很确定我在这里做了一些严重错误的事情 因为我根本无法通过谷歌搜索找到任何信息 我有一个 django 网站 我想要一个 JS 图表库 我选择了 Chart js 我安装并喜欢这些文档 但之后我不确定该怎么做 所以我尝
  • 监视同步 XMLHttpRequest 调用的进度

    在客户端 我有一个文件放置区 HTML5 文件 API 用户可以在其中放置应上传到服务器的多个文件 对于每个文件 都会创建一个新的 XMLHttpRequest 对象 并将文件异步发送到服务器 我正在通过以下方式监控进度progressxh
  • 将值传递给 Javascript 时出现引号问题

    我正在使用像 myPage td a href Edit a td where row name 其值中有引号 它坏了 我如何从 php 端和 js 端解决这个问题 row name 是来自数据库的值 它的价值就像pradeep s and
  • 如何使用 Leaflet API 更改地图的位置中心?

    我的地图 Mapbox 占据了网站的整个背景 因此中心位于网站的中间 但用户的地图焦点位于右侧 因为我的内容与左侧的地图重叠 当传单抓取位置时 它是从地图的中心开始的 但是如果我可以将其设置为从网站右三分之一的中心抓取位置 这样用户就不会居
  • 使用 CUDA __shfl_down 函数查找数组及其索引中的最小值

    我正在编写一个函数 它将找到最小值以及使用 CUDA 找到一维数组的值的索引 我首先修改用于查找一维数组中的值之和的简化代码 该代码对于求和函数工作得很好 但我无法让它工作来找到最小值 我在消息中附上了代码 如果有cuda高手请指出我犯的错
  • C# 文件下载已损坏

    我在 Web API 项目的实用程序中有一些 C 代码的上传部分工作正常 我已验证到达服务器的文件与上传的文件是否匹配 但是 下载过程中发生了一些事情 导致客户端将文件视为已损坏 当我进行比较时 我可以看到出现了问题 不幸的是 我不知道我做
  • 如何确保我创建的文件下载是UTF-8? (而不是无 BOM 的 UTF-8)

    我制作了一个下载功能 将消息下载到 CSV 文件 代码如下 现在 当我在记事本或记事本 中打开它时 我看到 NY 顺便说一句 这就是数据库中的内容 现在 当我在 Ms Excel 中打开它时 它显示 纽约 当我在记事本 中打开它时 它说它是
  • 一个管理多个类的类是不是“神物”?

    Reading 维基百科关于 God Objects 的条目 http en wikipedia org wiki God object 它说一个类是一个上帝对象 当它知道太多或做太多 我明白了这背后的逻辑 但如果这是真的 那么如何耦合每个
  • 如何使用 javascript 检测浏览器选项卡刷新或关闭[重复]

    这个问题在这里已经有答案了 我有一个问题 我有一个javascript我想在浏览器关闭时使用的功能 我怎样才能检测到它a browser is being closed 我做了一些研究 得到了像这样的解决方案onunload or befo
  • 为什么 numpy.argmax 对于所有 False 布尔值的列表产生零?

    我在用着numpy argmax计算第一个索引 其中True可以在布尔向量中找到 调用一个pandas Series给我系列索引而不是元素索引 我在代码中发现了一个微妙的错误 当向量全部为 False 时 该错误就会弹出 在这种情况下返回索
  • 如何在内存中缓冲 stdout 并从专用线程写入它

    我有一个带有许多工作线程的 C 应用程序 重要的是 这些不会阻塞 因此当工作线程需要写入磁盘上的文件时 我让它们写入内存中的循环缓冲区 然后有一个专用线程将该缓冲区写入磁盘 工作线程不再阻塞 专用线程在写入磁盘时可以安全地阻塞 而不会影响工
  • 对小数值进行 Math.Round(x,2),但需要确保小数点后 2 个数字作为其货币

    有些值返回 2 0 但我需要它为 2 00 因为这是显示在网页上的货币值 我在做 Math Round value 2 有没有办法强制它到小数点后2个数字 您应该使用小数来存储货币值 但无论您使用的是小数还是浮点类型 您的问题都会询问数字如
  • 在 Python Tkinter 中获取父窗口小部件的父窗口

    我试图获取一个小部件的父级 然后获取该小部件的父级 但每次我尝试时都会出错 Error AttributeError str object has no attribute nametowidget 为什么它给我这个错误 有人可以向我解释为
  • 通过 WPF 和 XAML 以及数据绑定查看设计视图中的 UI 更改吗?

    我刚刚在 XAML 上观看了这段视频 他在其中创建了一个时钟 并注意到他实际上可以在 Xaml 设计视图中看到他在 C Sharp 中所做的所有更改 33 30 他创建了自己的类 https youtu be Wb l0e6WYE0 t 2