C# WPF/XAML中带图标工具栏的实现

C# WPF/XAML中带图标工具栏的实现,c#,.net,wpf,xaml,toolbar,C#,.net,Wpf,Xaml,Toolbar,在我的基于桌面的WPF应用程序中,我希望实现一个带有关键操作(添加、更新、删除等)的工具栏,就像您在任何web界面邮件服务中看到的那样 为了做到这一点,我有一个大的PNG图像和所有可能的图标(常规、活动、禁用等) 所以,我的问题是如何不显示整个图像,而只显示一个区域。例如,从像素50到像素100,在我的图标为正方形且有50px边的情况下 换句话说,如果所有图标都放在一个大的PNG图像上,您建议如何在WPF中实现选择要显示在工具栏按钮内部的图像的一个子部分 谢谢 顺便说一句,我来自web开发,在那

在我的基于桌面的WPF应用程序中,我希望实现一个带有关键操作(添加、更新、删除等)的工具栏,就像您在任何web界面邮件服务中看到的那样

为了做到这一点,我有一个大的PNG图像和所有可能的图标(常规、活动、禁用等)

所以,我的问题是如何不显示整个图像,而只显示一个区域。例如,从像素50到像素100,在我的图标为正方形且有50px边的情况下

换句话说,如果所有图标都放在一个大的PNG图像上,您建议如何在WPF中实现选择要显示在工具栏按钮内部的图像的一个子部分

谢谢


顺便说一句,我来自web开发,在那里通常使用一个带有所有图标的大PNG图像,当你想放置一个特定的图标时,你必须定义你想在图像中显示的区域。

这确实不是WPF中管理图像资源的方式,如果你这样做,你将与平台的自然机制作斗争。您应该考虑将图像拆分,然后将每一个图像分配给视图中的资源。然后可以绑定到UI中的每一个,并将其显示为图像或笔刷源


如果要将它们保留为一个大图像,则可以使用选择框将其选中,并仅显示所需图像的区域。

您可能需要查看
BitmapImage
类(图像源)上的


然而,我认为codekaizen是正确的,这可能不是正确的方法。

您可以将按钮的背景设置为带有图像的
图像笔刷。将
TileMode
设置为
None
并将
ViewboxUnits
设置为
Absolute
。您可以将
Viewbox
设置为适当的区域。然后可以绑定到属性以动态更改图像,或者如果它是静态图像,则直接设置值

<Button Width="80" Height="80">
    <Button.Background>
        <ImageBrush ImageSource="..." TileMode="None" ViewboxUnits="Absolute">
            <ImageBrush.Viewbox>
                <Rect Size="80,80" X="{Binding ...}" />
            </ImageBrush.Viewbox>
        </ImageBrush>
    </Button.Background>
</Button>

我同意,这不是最有效地利用资源,但下面是如何做到的