C++/WinRT - TextBlock,如何动态附加并将其位置 (x, y) 设置为 XAML 形式?
C++ /WinRT - TextBlock, how to dynamically attach and set its position (x, y) to XAML form?
下面是空白应用程序 (C++/WinRT) 项目。
我正在尝试创建一个 TextBlock 并根据 MainPage.cpp 动态设置其文本 (x,y) 属性 "Left" 和 "Top" 并在运行时显示它 XAML表格.
但是,为了测试,下面的代码能够成功编译,并且在运行时结果中,没有显示 TextBlock 组件 "Hellow World!"。
有什么错误或遗漏的吗?
namespace winrt::...::implementation
{
MainPage::MainPage()
{
InitializeComponent();
Process();
}
void MainPage::Process()
{
winrt::hstring hs = L"Hello World!";
TextBlock tbx;
tbx.FontFamily( Windows::UI::Xaml::Media::FontFamily(
L"Segoe UI Semibold" ) );
tbx.FontSize(72.0);
tbx.Foreground( SolidColorBrush( Colors::Orange() ) );
tbx.VerticalAlignment( VerticalAlignment::Center );
tbx.TextAlignment( TextAlignment::Center );
tbx.Text( hs );
Window window = Window::Current();
window.Content( tbx );
window.Activate();
}
}
请指教
根本问题是 XAML 布局问题。这是一个小演示,可以让您走上正确的轨道。我将上面的 MainPage 修改为如下所示:
MainPage::MainPage()
{
InitializeComponent();
winrt::hstring hs = L"Hello World!";
TextBlock tbx;
tbx.FontFamily(Windows::UI::Xaml::Media::FontFamily(
L"Segoe UI Semibold"));
tbx.FontSize(72.0);
tbx.Foreground(SolidColorBrush(Colors::Orange()));
tbx.VerticalAlignment(VerticalAlignment::Center);
tbx.TextAlignment(TextAlignment::Center);
tbx.Text(hs);
this->Content().as<Panel>().Children().Append(tbx);
}
XAML 页面如下所示:
<Page ... >
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="myButton" >Click Me</Button>
</StackPanel>
</Page>
基本思想是您希望将控件添加到管理主页布局的面板,而不是将其添加到顶层 Window 对象。在设计器中稍微尝试一下以获得所需的外观,然后使用 C++/WinRT 将其重组为等效代码可能会有所启发。
本
刚刚发现这个作品:
TranslateTransform pos;
pos.X( 500 );
pos.Y( 500 );
tbx.RenderTransform( pos )
或者,从 Microsoft Build 2019 中找到了一个最新视频,它显示了一个 UWP C++ 示例 XAML,其中包含相关信息。
这里是 link:
认识 C++/WinRT 2.0:在开放环境中更快、更智能 - BRK4009
[https://www.youtube.com/watch?v=X41j_gzSwOY][1]
下面是空白应用程序 (C++/WinRT) 项目。
我正在尝试创建一个 TextBlock 并根据 MainPage.cpp 动态设置其文本 (x,y) 属性 "Left" 和 "Top" 并在运行时显示它 XAML表格.
但是,为了测试,下面的代码能够成功编译,并且在运行时结果中,没有显示 TextBlock 组件 "Hellow World!"。
有什么错误或遗漏的吗?
namespace winrt::...::implementation
{
MainPage::MainPage()
{
InitializeComponent();
Process();
}
void MainPage::Process()
{
winrt::hstring hs = L"Hello World!";
TextBlock tbx;
tbx.FontFamily( Windows::UI::Xaml::Media::FontFamily(
L"Segoe UI Semibold" ) );
tbx.FontSize(72.0);
tbx.Foreground( SolidColorBrush( Colors::Orange() ) );
tbx.VerticalAlignment( VerticalAlignment::Center );
tbx.TextAlignment( TextAlignment::Center );
tbx.Text( hs );
Window window = Window::Current();
window.Content( tbx );
window.Activate();
}
}
请指教
根本问题是 XAML 布局问题。这是一个小演示,可以让您走上正确的轨道。我将上面的 MainPage 修改为如下所示:
MainPage::MainPage()
{
InitializeComponent();
winrt::hstring hs = L"Hello World!";
TextBlock tbx;
tbx.FontFamily(Windows::UI::Xaml::Media::FontFamily(
L"Segoe UI Semibold"));
tbx.FontSize(72.0);
tbx.Foreground(SolidColorBrush(Colors::Orange()));
tbx.VerticalAlignment(VerticalAlignment::Center);
tbx.TextAlignment(TextAlignment::Center);
tbx.Text(hs);
this->Content().as<Panel>().Children().Append(tbx);
}
XAML 页面如下所示:
<Page ... >
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="myButton" >Click Me</Button>
</StackPanel>
</Page>
基本思想是您希望将控件添加到管理主页布局的面板,而不是将其添加到顶层 Window 对象。在设计器中稍微尝试一下以获得所需的外观,然后使用 C++/WinRT 将其重组为等效代码可能会有所启发。
本
刚刚发现这个作品:
TranslateTransform pos;
pos.X( 500 );
pos.Y( 500 );
tbx.RenderTransform( pos )
或者,从 Microsoft Build 2019 中找到了一个最新视频,它显示了一个 UWP C++ 示例 XAML,其中包含相关信息。
这里是 link:
认识 C++/WinRT 2.0:在开放环境中更快、更智能 - BRK4009 [https://www.youtube.com/watch?v=X41j_gzSwOY][1]