首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cppwinrt中图像按钮的编程创建

cppwinrt中图像按钮的编程创建
EN

Stack Overflow用户
提问于 2017-12-18 23:47:54
回答 2查看 382关注 0票数 0

使用cppwinrt (标准C++,而不是C++/CX),如何以编程方式将按钮的内容设置为图像?必须以编程的方式进行,因为cppwinrt还不支持xaml,这样做很容易。下面是我正在尝试的,结果是一个功能强大但却是空的按钮:

代码语言:javascript
复制
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++中以编程方式这样做的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-14 01:13:10

你的原始代码在我这边运行得很好。只需通过检查图像属性中的内容参数是否设置为True,就可以确保您的图像确实在资产/图像文件夹中,将其添加到项目中,并确保它在构建过程中与应用程序内容一起复制。

阅读您的进一步需求后,编辑。只要设置按钮填充和边框厚度为零,这将删除图像周围的任何空间。

下面是一个使用按钮创建代码的简单工作应用程序:

代码语言:javascript
复制
#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();
}
票数 2
EN

Stack Overflow用户

发布于 2017-12-19 20:46:54

好的,下面是使按钮显示填充按钮的图像所需的内容:与其将button.Content设置为图像,不如用图像创建一个ImageBrush,并将button.Background设置为该ImageBrush。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47878086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档