Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >实现可重用按钮

实现可重用按钮
EN

Stack Overflow用户
提问于 2014-12-19 13:51:28
回答 2查看 74关注 0票数 0

我想知道我如何做到这一点:

在一个对话框中,我有一个带有图像的按钮:

代码语言:javascript
运行
AI代码解释
复制
    <Button>
        <StackPanel Orientation="Horizontal">
            <StaticResourceExtension ResourceKey="Save"/> // Image for this button (floppy disk)
            <TextBlock Text="Add customer"/>
        </StackPanel>
    </Button>

这应该是一个默认的‘保存按钮’在我的项目。我怎样才能使它可重用?现在,我必须在另一个上下文中复制这段代码,比如添加文章:

代码语言:javascript
运行
AI代码解释
复制
    <Button>
        <StackPanel Orientation="Horizontal">
            <StaticResourceExtension ResourceKey="Save"/>
            <TextBlock Text="Add article"/>
        </StackPanel>
    </Button>

我想要一个地方,我可以改变它,并影响每一个‘保存’按钮在我的整个项目。我尝试过ControlTemplate,但是如果我使用它,系统默认的按钮设计就会消失。但我想要系统的默认设计。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-19 14:05:53

您可以使用样式来实现这一点。

代码语言:javascript
运行
AI代码解释
复制
<Window.Resources>
    <Style TargetType="{x:Type Button}" x:Key="saveButton">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Image Width="24" Height="24" Source="{StaticResource Save}"/>
                        <TextBlock Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}"/>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

然后用你的按钮:

代码语言:javascript
运行
AI代码解释
复制
<Grid>
    <Button Content="Save" Style="{StaticResource saveButton}"/>
    <Button Content="Add article" Style="{StaticResource saveButton}"/>
</Grid>

将资源字典中的Image替换为BitmapImage

代码语言:javascript
运行
AI代码解释
复制
<BitmapImage UriSource="Images/MenuIcons/File.png" x:Key="File" />
票数 2
EN

Stack Overflow用户

发布于 2014-12-19 14:33:33

IconDictionary:

代码语言:javascript
运行
AI代码解释
复制
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style TargetType="Image">
    <Setter Property="Height" Value="24" />
    <Setter Property="Width" Value="24" />
</Style>

<!--MENU_ICONS:-->
<Image Source="../Images/MenuIcons/KraftSolution.ico" x:Key="KraftSolution" />
<Image Source="../Images/MenuIcons/File.png" x:Key="File" />
<Image Source="../Images/MenuIcons/Close.png" x:Key="Close" />
<Image Source="../Images/MenuIcons/Customers.png" x:Key="Customers"  />
<Image Source="../Images/MenuIcons/Vehicles.png" x:Key="Vehicles"  />
<Image Source="../Images/MenuIcons/Components.png" x:Key="Components"  />
<Image Source="../Images/MenuIcons/Connection.png" x:Key="Connection"  />
<Image Source="../Images/MenuIcons/Info.png" x:Key="Info" />

<!--MENU_OPERATIONS:-->

<!--CUSTOMER:-->
<Image Source="../Images/MenuOperations/Customer/Customer_Add.png" x:Key="CustomerAdd" />
<Image Source="../Images/MenuOperations/Customer/Customer_Edit.png" x:Key="CustomerEdit" />
<Image Source="../Images/MenuOperations/Customer/Customer_Delete.png" x:Key="CustomerDelete" />

<!--VEHICLE:-->
<Image Source="../Images/MenuOperations/Vehicle/Vehicle_Add.png" x:Key="VehicleAdd" />
<Image Source="../Images/MenuOperations/Vehicle/Vehicle_Edit.png" x:Key="VehicleEdit" />
<Image Source="../Images/MenuOperations/Vehicle/Vehicle_Delete.png" x:Key="VehicleDelete" />

<!--COMPONENT:-->
<Image Source="../Images/MenuOperations/Component/Component_Add.png" x:Key="ComponentAdd" />
<Image Source="../Images/MenuOperations/Component/Component_Edit.png" x:Key="ComponentEdit" />
<Image Source="../Images/MenuOperations/Component/Component_Delete.png" x:Key="ComponentDelete" />

<!--TAB CONTROL:-->
<Image Source="../Images/MenuIcons/Notes.png" x:Key="Notes" />
<Image Source="../Images/MenuIcons/Contact.png" x:Key="Contact" />

<!--SEARCH_BUTTON:-->
<Image Source="../Images/MenuIcons/Search.png" x:Key="Search" />

<Image Source="../Images/MenuOperations/Save.png" x:Key="Save" Height="24" Width="24"/>
<Image Source="../Images/MenuOperations/Abort.png" x:Key="Abort" />

为了解决我的问题,我在保存图像中添加了Height="24“Width=24。但我不想那样。我想要一个位置,我可以控制图像大小。

您的风格在另一个资源字典中,我在窗口中包含了两个字典,在其中我使用了按钮和图像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27574389

复制
相关文章
GitHub 如何从特定的版本中创建分支
在 Git 的操作中,我们可能需要从特定的版本中创建分支。 首先需要的第一步是活的当前项目的提交历史列表。 然后在特定的版本后,选择 <> 标记,进入这个版本的提交历史。 在左上角上,选择提交历史。 在弹出的对话框中输入分支名称。 在你输入名称后,将会提示你创建分支。 这个的意思是从当前的提交版本中创建一个分支。 然后可以从上面的提交中创建一个分支。 在创建完成后,可以从分支列表中查看创建的分支列表。 https://www.ossez.com/t/github/13414
HoneyMoose
2021/04/02
6.9K0
GitHub 如何从特定的版本中创建分支
tar压缩时排除特定文件和文件夹
一日一技是一个每天更新的栏目,力图做到让你每天用2分钟的时间掌握一个开发技巧。 ---- tar压缩文件的时候排除特定文件和文件夹: tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz . 注意末尾有一个点。
青南
2018/10/18
1.7K0
如何使用CP / SCP / RSYNC在Linux中排除特定目录?
对于任何系统管理员或一般Linux操作系统用户而言,在服务器之间执行文件复制操作都是一项常见任务。在将文件从一个系统复制到另一个系统时,由于某些特定原因,我们可能需要排除某些文件和目录被复制。即使在同一系统上将数据从一个位置传输到另一位置时,这也可能适用。
用户6543014
2020/05/04
15.7K0
meteor 简介
“Meteor gives you a radically simpler way to build realtime mobile and web apps, entirely in JavaScript from one code base.”
IMWeb前端团队
2019/12/04
9220
meteor 简介
meteor 简介
本文作者:IMWeb helondeng 原文出处:IMWeb社区 未经同意,禁止转载 What “Meteor gives you a radically simpler way to b
IMWeb前端团队
2018/01/08
1.4K0
meteor 简介
Meteor Tupperware — 更精简的Meteor Docker镜像
meteor-tupperware是一款更为精简的、适用于生产环境的Meteor Docker镜像。我们只需要两分钟就能快速部署应用! 假设你已经安装了Docker并且运行它: 创建 Dockerfile 和 .dockerignore (从 README 复制粘贴即可) 运行 docker build -t yourapp . 你也可以配置它同ImageMagick或PhantomJS协作,如果你的应用依赖它们的话。 相比于之前提到的meteord,它们有如下区别: meteor-tupperware
时见疏星
2018/06/01
5010
如何Meteor中轻松使用Webpack
原文来自Meteor Forum,更多讨论点击「阅读原文」进行查看! Meteor是一套惊人的工具来高效地创建伟大的Web应用。我非常喜爱它。这也是我半年前创建了一个能让Webpack集成进Meteor的扩展包。我觉得如果我们能有一个实时热重载,ES6模块,资源打包和代码分离,这会让Meteor更加酷,并且我们做到了! 但有件事我并不是很高兴,那就是配置Webpack太难了。你需要学习一系列新的概念才能写webpack.config.js。我不喜欢那些文件,因为不管你做的东西多么简单,配置它们都相当麻烦。
时见疏星
2018/06/01
1.1K0
Netty中的引导类Bootstrap
Bootstrap是用来组织Netty的各个结构(pipeline,handler,eventloop),并使他们运行起来的类结构。分成两块,一个是客户端引导类Bootstrap,只用1个channel来处理所有的网络交互,另一个是服务端的ServerBootstrap,它提供一个父channel来接受客户端的请求,然后父channel创建多个子channel来用于的通信
爬蜥
2019/07/09
9570
Git 如何从特定的提交中创建一个新的分支
通过在提交历史中单击右键,然后选择分支,你就可在当前指定的提交历史中来创建一个新的分支了。
HoneyMoose
2022/06/04
6.8K0
Git 如何从特定的提交中创建一个新的分支
WordPress 技巧:如何从 WordPress 页面菜单中移除特定页面
从 wp_list_pages() 中生成的页面菜单中移除特定的页面是非常简单的,只需要把下面代码加入到主题的 functions.php 文件中:
Denis
2023/04/15
2K0
Redis进阶-如何从海量的 key 中找出特定的key列表 & Scan详解
假设你需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。那该如何从海量的 key 中找出满足特定前缀的 key 列表来?
小小工匠
2021/08/17
4.7K0
浏览器实验中的故障排除
https://webrtchacks.com/troubleshooting-unwitting-browser-experiments-al-brooks/
LiveVideoStack
2021/09/01
2.7K0
WordPress 技巧:从搜索结果中排除页面
默认情况下,WordPress 搜索结果显示发布的文章和页面,如果想把页面从 WordPress 搜索结果中排除,可以在当前主题的 functions.php 文件中添加如下的函数:
Denis
2023/04/13
4820
Blazor 中的路由和路由模板
过去的 ASP.NET Web 窗体和现代 Web 明显区别在于 Web 服务器入口是否存在路由组件。在 Web 窗体中,绝大多数 Web 终结点都是物理文件资源,直接通过其页面路径调用。
AI.NET 极客圈
2019/08/16
8.5K0
Egg 中的路由
在上面的路由中只插入了一个中间件,业务复杂时,还可以插入多个中间件,前提是要把用到的中间件全部引入。
越陌度阡
2020/11/26
1.7K0
Egg 中的路由
meteor框架学习
meteor js的全栈开发框架,官方的解释: Meteor makes it an order of magnitude simpler, and a lot more fun. You can b
用户1141560
2017/12/26
1.3K0
meteor框架学习
npm 中如何下载特定的组件版本
IMWeb前端团队
2018/01/08
4.3K0
npm 中如何下载特定的组件版本
ICCII中如何保持特定module的port
在进行后端设计时,为了使得最终的结果更加优化,也就是面积,功耗,性能更好,工具在优化时可能会把module的port改变。但是这样可能会带来一些问题。问题之一就是前端在进行仿真的时候,由于某些module port找不到了,很难找到需要监测的信号。
白山头
2020/09/15
2.7K0
点击加载更多

相似问题

成员从特定路由中排除混入

13

从Vue.js中的某些路由中排除引导样式

22

Symfony -从安全路径中排除特定路由

21

Meteor中的路由

31

路由regex要求:排除特定的单词

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文