微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用C ++ / WinRT + WinUI 3以编程方式设置TextBlock属性

如何解决如何使用C ++ / WinRT + WinUI 3以编程方式设置TextBlock属性

我已经躲藏在MFC的岩石下很多年了,因此我可以坚持使用标准C ++,但仍然可以编写Windows桌面应用程序。使用C ++ / WinRT和WinUI 3.0,看来我也许终于有机会现代化我的代码。问题是我对XAML或Windows API一无所知。为了解决此问题,我正在尝试通过Petzold的“ Programming Windows,第六版”进行工作,用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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。