基本上,我正在编写关于WPF的Microsoft教程: https://docs.microsoft.com/en-us/dotnet/opbuildpdf/framework/wpf/data/toc.pdf?branch=live
我到了第8页,(在我看来)微软搞砸了。它们不提供运行以下XAML所需的任何C#代码隐藏:
<DockPanel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:SDKSample">
<DockPanel.Resources>
<c:MyData x:Key="myDataSource"/>
</DockPanel.Resources>
<DockPanel.DataContext>
<Binding Source="{StaticResource myDataSource}"/>
</DockPanel.DataContext>
<Button Background="{Binding Path=ColorName}" Width="150" Height="30">
I am bound to be RED!</Button>
</DockPanel>
我尽可能地遵循他们的描述,但我得到的是以下错误消息。
The name "MyData" does not exist in the namespace "clr-namespace:SDKSample".
我做我应该做的事情:使用“添加新项目”创建一个c#文件并构建它,但仍然会再次弹出错误代码。为了使人们不必查阅文档,这是他们要求的内容:
考虑以下示例,其中绑定源对象是 在SDKSample命名空间中定义的名为MyData的类。对于 为了演示目的,MyData类有一个名为的字符串属性 ColorName,其值设置为“Red”。因此,这个例子 生成一个红色背景的按钮。
我已经查看了这个示例的各种SDK,希望我能在某个地方找到神秘的C#文件,但是我找不到它。好像微软忘记了一个链接。你知道,即使它在SDK中的某个地方,也很难找到。作为处于学习模式的人,我希望文档中提供所有细节,而不仅仅是上面的引用,其中没有详细说明放置C#文件的位置,你是怎么做的应该建立所以它将正确注册为现有。
所以,如果有人能找到一个很好的描述如何使XAML代码工作,通过在“SDKSamples”命名空间中创建一个名为“MyData”的C#类,我将非常感激。
答案 0 :(得分:0)
添加以下内容时xaml可以使用:
namespace SDKSample
{
public class MyData
{
public Brush ColorName { get; set; } = Brushes.Red;
}
}
答案 1 :(得分:0)
<Window x:Class="StackExchangeQuestion.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:StackExchangeQuestion"
mc:Ignorable="d"
xmlns:c="clr-namespace:SDKSample"
Title="MainWindow" Height="350" Width="525">
<DockPanel >
<DockPanel.Resources>
<c:MyData x:Key="myDataSource"/>
</DockPanel.Resources>
<DockPanel.DataContext>
<Binding Source="{StaticResource myDataSource}"/>
</DockPanel.DataContext>
<Button Background="{Binding Path=ColorName}" Width="150" Height="30">
I am bound to be RED!</Button>
</DockPanel>
</Window>
我想补充一点,Microsoft假定您已经拥有<Window x:Class and Width="525">
之间的所有内容。只是在他们的文档中遗漏了大量的细节,这是一种草率的工作。感谢米兰让我看看代码<Window>...</Window>
部分应该包含哪些内容。
另外,为了完整性,C#代码:
using System.Windows;
using System.Windows.Media;
namespace StackExchangeQuestion
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
namespace SDKSample
{
public class MyData
{
public Brush ColorName { get; set; } = Brushes.Red;
}
}