Программное создание кнопки изображения в cppwinrt

Используя cppwinrt (стандартный C ++, а не C ++ / CX), как бы вы программно установили содержимое Button для изображения? Должно быть программно, потому что cppwinrt еще не поддерживает xaml, в котором это легко сделать. Вот что я пытаюсь, что приводит к функциональной, но пустой кнопке:

Button button = Button();
BitmapImage bitmapImage = BitmapImage();
Uri imageUri = Uri(L"ms-appx:///Assets/Images/stopbutton.png");
bitmapImage.UriSource(imageUri);
Image buttonImage = Image();
buttonImage.Height(30);
buttonImage.Width(30);
buttonImage.Source(bitmapImage);
button.Content(buttonImage);

Затем, конечно, я добавляю кнопку, которая хорошо отображается, хотя и пустая. Я пробовал абсолютный путь для .png, но это также не удается. Должен быть способ сделать это программно в C ++.

0

Решение

Ваш оригинальный код отлично работает на моей стороне. Просто убедитесь, что ваше изображение действительно находится в папке Assets / Images, что вы добавили его в свой проект и что оно скопировано с содержимым приложения во время сборки, проверив, установлен ли для параметра Content в свойствах изображения значение True.

редактировать
После прочтения ваших дальнейших требований. Просто установите отступы кнопок и толщину границ на ноль, это удалит все пространство вокруг изображения.

Вот простое рабочее приложение с кодом создания вашей кнопки:

#include <winrt\Windows.ApplicationModel.Activation.h>
#include <winrt\Windows.Devices.Enumeration.h>
#include <winrt\Windows.Foundation.h>
#include <winrt\Windows.UI.Xaml.h>
#include <winrt\Windows.UI.Xaml.Controls.h>
#include <winrt\Windows.UI.Xaml.Media.Imaging.h>using namespace winrt;
using namespace winrt::Windows::ApplicationModel::Activation;
using namespace winrt::Windows::Devices::Enumeration;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::UI::Xaml;
using namespace winrt::Windows::UI::Xaml::Controls;
using namespace winrt::Windows::UI::Xaml::Media::Imaging;struct App : ApplicationT<App>
{
void OnLaunched(LaunchActivatedEventArgs const &)
{
Image image;
image.Height(30);
image.Width(30);
image.Source(BitmapImage(Uri(L"ms-appx:///Assets/Images/sample.png")));

Button button;
button.Padding(ThicknessHelper::FromUniformLength(0));
button.BorderThickness(ThicknessHelper::FromUniformLength(0));
button.Content(image);

Window window = Window::Current();
window.Content(button);
window.Activate();
}

static void Initialize(ApplicationInitializationCallbackParams const &)
{
make<App>();
}

static void Start()
{
Application::Start(App::Initialize);
}
};

int WINAPI wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
{
App::Start();
}
1

Другие решения

Хорошо, вот что необходимо, чтобы кнопка отображала изображение, которое заполняет кнопку: вместо того, чтобы устанавливать кнопку. Содержите изображение, создайте ImageBrush с изображением и установите для Button.Background значение этого ImageBrush, например,

Button button = Button();
button.Height(30);
button.Width(30);
BitmapImage bitmapImage = BitmapImage();
Uri imageUri = Uri(L"ms-appx:///Assets/Images/stopbutton.png");
bitmapImage.UriSource(imageUri);
ImageBrush imageBrush = ImageBrush();
imageBrush.ImageSource(bitmapImage);
button.Background(imageBrush);
//The button will now look exactly like the image.
0

По вопросам рекламы [email protected]