C ++ / WinRT - TextBlock, как динамически прикрепить и установить его положение (x, y) в форму XAML? - PullRequest
0 голосов
/ 27 апреля 2019

Ниже был проект Blank App (C ++ / WinRT).

Я пытаюсь создать TextBlock и установить его свойства Text (x, y) "Left" и "Top" динамически из MainPage.cpp и отобразить его в форме 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();
    }
}

Пожалуйста, сообщите.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Только что обнаружил, что это работает:

    TranslateTransform pos;
    pos.X( 500 );
    pos.Y( 500 );
    tbx.RenderTransform( pos )

В качестве альтернативы, нашел последнее видео из Microsoft Build 2019, он показал пример UWP C ++ с XAML с соответствующей информацией в пределах.

Вотссылка:

Meet C ++ / WinRT 2.0: быстрее и умнее под открытым небом - BRK4009 [https://www.youtube.com/watch?v=X41j_gzSwOY][1]

0 голосов
/ 07 мая 2019

Основной проблемой является проблема макета 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.

Ben

...