1

多年来,我一直隐藏在 MFC 的岩石之下,因此我可以坚持使用标准 C++,但仍然可以编写 Windows 桌面应用程序。使用 C++/WinRT 和 WinUI 3.0,我似乎终于有机会对我的代码进行现代化改造。问题是我对 XAML 或 Windows API 一无所知。为了解决这个问题,我正在尝试通过 Petzold 的“Programming Windows, 6th ed.”,用 C++/WinRT 替换 C# 代码。当我所要做的就是编写 XAML 时,一切都是徒劳的。但是,当我到达 p。24,我应该在代码中调整 TextBlock 属性。这是C#:

TextBlock tb = new TextBlock();
tb.Text = "Hello, Windows 8!";
tb.FontFamily = new FontFamily("Times New Roman");
tb.FontSize = 96;
tb.FontStyle = FontStyle.Italic;
...

这是我的替换尝试:

TextBlock tb;
tb.Text(L"Hello, Windows 8!");
tb.FontFamily(FontFamily(L"Times New Roman"));
tb.FontSize(96);
tb.FontStyle(FontStyle::Italic);
...

一切顺利,直到最后一行。无法识别“FontStyle::Italic”。我对 Color 和 Horizo​​ntalAlignment 的枚举也有类似的问题。访问这些枚举的正确方法是什么?我是否忘记了包含或“使用”?这是我目前拥有的:

#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.ApplicationModel.Activation.h>
#include <winrt/Microsoft.UI.Composition.h>
#include <winrt/Microsoft.UI.Text.h>
#include <winrt/Microsoft.UI.Xaml.h>
#include <winrt/Microsoft.UI.Xaml.Controls.h>
#include <winrt/Microsoft.UI.Xaml.Controls.Primitives.h>
#include <winrt/Microsoft.UI.Xaml.Data.h>
#include <winrt/Microsoft.UI.Xaml.Interop.h>
#include <winrt/Microsoft.UI.Xaml.Markup.h>
#include <winrt/Microsoft.UI.Xaml.Media.h>
#include <winrt/Microsoft.UI.Xaml.Navigation.h>
#include <winrt/Microsoft.UI.Xaml.Shapes.h>

using namespace winrt;
using namespace Microsoft::UI::Text;
using namespace Microsoft::UI::Xaml::Controls;
using namespace Microsoft::UI::Xaml::Controls::Primitives;
using namespace Microsoft::UI::Xaml::Media;

我希望我的长问题有一个简短的答案。

4

1 回答 1

0

可以肯定的是,您需要发布更多详细信息(例如您收到的错误消息)。但我猜测您的代码可能缺少命名空间限定符。我只是离开了 UWP Windows 命名空间类型,而不是 WinUI Microsoft 命名空间,但是这段代码是为我构建的:

#include <winrt/Windows.UI.h>
#include <winrt/Windows.UI.Text.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Media.h>

void f()
{
    winrt::Windows::UI::Xaml::Controls::TextBlock tb;
    tb.Text(L"Hello");
    tb.FontFamily(winrt::Windows::UI::Xaml::Media::FontFamily(L"Times New Roman"));
    tb.FontSize(96);
    tb.FontStyle(winrt::Windows::UI::Text::FontStyle::Italic);
    tb.SelectionHighlightColor(winrt::Windows::UI::Xaml::Media::SolidColorBrush(winrt::Windows::UI::Colors::Red()));
    tb.HorizontalAlignment(winrt::Windows::UI::Xaml::HorizontalAlignment::Center);
}

就像这样:

#include <winrt/Windows.UI.h>
#include <winrt/Windows.UI.Text.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Media.h>

using namespace winrt;
using namespace winrt::Windows::UI;
using namespace winrt::Windows::UI::Text;
using namespace winrt::Windows::UI::Xaml;
using namespace winrt::Windows::UI::Xaml::Controls;
using namespace winrt::Windows::UI::Xaml::Media;

void f()
{
    TextBlock tb;
    tb.Text(L"Hello");
    tb.FontFamily(FontFamily(L"Times New Roman"));
    tb.FontSize(96);
    tb.FontStyle(FontStyle::Italic);
    tb.SelectionHighlightColor(SolidColorBrush(Colors::Red()));
    tb.HorizontalAlignment(HorizontalAlignment::Center);
}
于 2020-10-24T07:54:56.917 回答