簡體   English   中英

如何使用 C++/WinRT + WinUI 3 以編程方式設置 TextBlock 屬性

[英]How to set TextBlock properties programmatically using C++/WinRT + WinUI 3

多年來,我一直躲在 MFC 搖滾之下,因此我可以堅持使用標准 C++,但仍然編寫 Windows 桌面應用程序。 使用 C++/WinRT 和 WinUI 3.0,我似乎終於有機會更新我的代碼了。 問題是我對 XAML 或 Windows API 一無所知。 為了解決這個問題,我正在嘗試通過 Petzold 的“Windows 編程,第 6 版”,用 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;

我希望我的長問題有一個簡短的答案。

可以肯定的是,您需要發布更多細節(例如您收到的錯誤消息)。 但我猜測您的代碼可能缺少命名空間限定符。 我只是要離開 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM