查看 UI 设计视图中使用 WPF 和 XAML 以及数据绑定的更改?
See UI changes in design view with WPF & XAML and data binding?
我刚刚在 XAML 上观看了他创建时钟的视频,并注意到他实际上可以在 Xaml 设计视图中看到他从 C Sharp 所做的所有更改。
在 33:30 他创造了他的 class:https://youtu.be/Wb-l0e6WYE0?t=2008
在 37:10 他绑定到 class:https://youtu.be/Wb-l0e6WYE0?t=2227
稍后在 40:17 您可以在设计视图中实际看到时钟在滴答作响!
我试图通过创建一个名为 Ball 的 class 来实现这一点,它具有一些属性,例如大小,并将这些属性绑定到一个 Canvas 上,该矩形具有一个 EllipseGeometry 剪辑,使它成为圆形。当 运行 应用程序但设计视图只是白色时,它工作正常。
有谁知道他是怎么做到的?
我的代码:
MainWindow.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;
}
}
}
球Class:
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");
}
}
}
}
INotifyPropertyChangedBase Class:
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));
}
}
}
}
我还有一个按钮可以增加球的大小!
感谢您的帮助。
DataContext
允许 XAML 找到它要绑定到的 class 实例。
然后,XAML 中的绑定允许您绑定到上述 class 的特定属性。
有两个单独的 DataContext:design time
和 run time
。
要设置 design time
DataContext,请参阅:
http://adamprescott.net/2012/09/12/design-time-data-binding-in-wpf/
本质上,当您设置设计时 DataContext 时,WPF 运行time 会在后台自动实例化您指向的 class 的新实例(或简单地指向 class 如果它是静态的),然后 Visual Studio 设计时设计器将在您编辑 XAML 时显示来自您的 class 的实时值。这使得设计速度非常快,因为您可以使用实时数据,而且您不必一直 运行 程序来查看它的外观。
要设置 run time
DataContext,请参阅 ReSharper WPF error: "Cannot resolve symbol "MyVariable" due to unknown DataContext"。答案描述了如何使用免费的 Snoop 实用程序来检测 运行 时间绑定错误。
添加了这段代码:
d:DataContext="{d:DesignInstance local:Ball,IsDesignTimeCreatable=True}"
现在我可以在设计时看到我的绿球了!
谢谢!
我刚刚在 XAML 上观看了他创建时钟的视频,并注意到他实际上可以在 Xaml 设计视图中看到他从 C Sharp 所做的所有更改。
在 33:30 他创造了他的 class:https://youtu.be/Wb-l0e6WYE0?t=2008
在 37:10 他绑定到 class:https://youtu.be/Wb-l0e6WYE0?t=2227
稍后在 40:17 您可以在设计视图中实际看到时钟在滴答作响!
我试图通过创建一个名为 Ball 的 class 来实现这一点,它具有一些属性,例如大小,并将这些属性绑定到一个 Canvas 上,该矩形具有一个 EllipseGeometry 剪辑,使它成为圆形。当 运行 应用程序但设计视图只是白色时,它工作正常。
有谁知道他是怎么做到的?
我的代码:
MainWindow.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;
}
}
}
球Class:
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");
}
}
}
}
INotifyPropertyChangedBase Class:
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));
}
}
}
}
我还有一个按钮可以增加球的大小!
感谢您的帮助。
DataContext
允许 XAML 找到它要绑定到的 class 实例。
然后,XAML 中的绑定允许您绑定到上述 class 的特定属性。
有两个单独的 DataContext:design time
和 run time
。
要设置 design time
DataContext,请参阅:
http://adamprescott.net/2012/09/12/design-time-data-binding-in-wpf/
本质上,当您设置设计时 DataContext 时,WPF 运行time 会在后台自动实例化您指向的 class 的新实例(或简单地指向 class 如果它是静态的),然后 Visual Studio 设计时设计器将在您编辑 XAML 时显示来自您的 class 的实时值。这使得设计速度非常快,因为您可以使用实时数据,而且您不必一直 运行 程序来查看它的外观。
要设置 run time
DataContext,请参阅 ReSharper WPF error: "Cannot resolve symbol "MyVariable" due to unknown DataContext"。答案描述了如何使用免费的 Snoop 实用程序来检测 运行 时间绑定错误。
添加了这段代码:
d:DataContext="{d:DesignInstance local:Ball,IsDesignTimeCreatable=True}"
现在我可以在设计时看到我的绿球了!
谢谢!