`

C# - Button with image as the visual

    博客分类:
  • WPF
wpf 
阅读更多

it is sometime useful to use a imgae as the content of the Button, a picture has more meaning than the humdrum buttons. 

 

Below shows how you can make such a button.

 

You first define a button style. (where you can find such a button style from say Infragistics .xaml files)

 

 

<Style TargetType="Button" x:Key="ExpanderStyle">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="HorizontalAlignment" Value="Center" />
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border x:Name="Border" DataContext="{x:Null}"
                        Background="Transparent">
                    <ContentPresenter Margin="2" HorizontalAlignment="Center"
                                      VerticalAlignment="Center"
                                      RecognizesAccessKey="True"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
 

 

then you can create such a button, settings its content property through the use of Button.Content.

 

<Button
    x:Name="templatedButton"
    Style="{StaticResource ExpanderStyle}"
    Padding="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Converter={StaticResource RowStateDisplayElementHeightConverter}, ConverterParameter=-0.45}"
    Height="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Converter={StaticResource RowStateDisplayElementHeightConverter}, ConverterParameter=0.85}"
    Width="{Binding ActualHeight, RelativeSource={RelativeSource Mode=Self}}">
    <Button.Visibility>
        <!-- <MultiBinding Converter="{StaticResource RowStateDisplayElementVisibilityConverter}">
            <Binding Path="AutoIndentRows" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type local:GridControl}}" />
            <Binding />
        </MultiBinding> -->
    </Button.Visibility>
    <Button.Content>
        <Image IsHitTestVisible="False" SnapsToDevicePixels="True" 
               Source="{Binding State, Converter={StaticResource RowStateDisplayValueConverter}}">
        </Image>
    </Button.Content>
    <Button.InputBindings>
        <MouseBinding 
            Gesture="LeftClick"
            Command="{Binding DataContext.ExpandCollapseCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}" 
            CommandParameter="{Binding}"/>
        <MouseBinding 
            Gesture="Shift+LeftClick"
            Command="{Binding DataContext.ExpandCollapseAllCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}" 
            CommandParameter="{Binding}"/>
        <KeyBinding 
            Gesture="Space"
            Command="{Binding DataContext.ExpandCollapseCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}" 
            CommandParameter="{Binding}"/>
        <KeyBinding 
            Gesture="Shift+Space"
            Command="{Binding DataContext.ExpandCollapseAllCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}" 
            CommandParameter="{Binding}"/>
    </Button.InputBindings>
</Button>
 

and last, you may use the following to convert a image (bitMap) to some BitmapImage (BitmapImage)

 

 

internal class RowStateDisplayValueConverter: IValueConverter
  {
    private static BitmapImage Collapse;
    private static BitmapImage Expanded;

    static RowStateDisplayValueConverter()
    {
      Collapse = GetBitmapImage(Properties.Resources.Collapse);
      Expanded = GetBitmapImage(Properties.Resources.Expanded);
    }

    static BitmapImage GetBitmapImage(System.Drawing.Bitmap bitmap)
    {
      using (var stream = new MemoryStream())
      {
        bitmap.Save(stream, ImageFormat.Png);
        stream.Seek(0, SeekOrigin.Begin);
        var bitmapImage = new BitmapImage();
        bitmapImage.BeginInit();
        bitmapImage.StreamSource = stream;
        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapImage.EndInit();
        return bitmapImage;
      }
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      switch ((RowState) value)
      {
        case RowState.Collapsed:
          return Collapse;
        case RowState.Expanded:
          return Expanded;
        default:
        case RowState.Leaf:
        case RowState.Hidden:
          return null;
      }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      throw new NotSupportedException();
    }
  }
 

 

In the above, the image of is stored as some resources in the .xaml file. 

分享到:
评论

相关推荐

    C#绘制不规则button

    ### C#绘制不规则Button详解 #### 一、引言 在GUI开发中,我们经常需要自定义控件的外观来提升用户体验。本篇文章将详细介绍如何利用C#结合`System.Drawing.Drawing2D`命名空间中的类和方法来实现不规则形状的...

    Button加载Image

    以上就是关于"Button加载Image"的相关知识点,包括如何在Visual Studio 2010中设置静态和动态加载按钮图像,以及一些相关的UI设计和性能优化考虑。希望这些内容能对你在实际开发中实现类似功能有所帮助。

    通过C#实现按钮的凸显凹陷

    在C#编程中,Windows Presentation Foundation(WPF)是一个强大的框架,用于构建具有丰富图形效果和用户交互的应用程序。在WPF中,我们可以利用它的强大功能来实现按钮的凸显凹陷效果,使得用户界面(UI)更加生动...

    c#自定义漂亮按钮

    本教程将基于给定的"C#自定义漂亮按钮"主题,深入讲解如何利用C#和Visual Studio 2010创建一个自定义的按钮控件。我们将主要探讨以下几个方面: 1. **自定义控件基础**: 在.NET Framework中,自定义控件是通过...

    C# CAD 创建Ribbon菜单,带图标

    在CAD(计算机辅助设计)应用开发中,C#是一种常用的语言,用于构建用户界面和交互功能。本主题将深入探讨如何使用C#来创建带有图标的Ribbon菜单,这是一种现代化的用户界面元素,常见于Microsoft Office等应用中。...

    Visual C# 语言编程技术培训教材

    - **第七讲、Visual C#中的图形编程及Image类和Regions、Paths等** - **图形编程概述:** - 使用C#进行图形编程的基本概念和技术。 - **Image类的使用:** - Image类用于处理图像文件,包括加载、显示和保存图像...

    C# 精美图标大全

    - 对于控件如按钮或菜单项,可以通过`Button.Image`或`ToolStripMenuItem.Image`属性设置图标。 3. 图标的设计原则: - 清晰易识:图标应简洁明了,一眼就能辨认出其含义。 - 一致性:应用中的所有图标应保持...

    Visual Studio 2005/C# 连连看

    **Visual Studio 2005 和 C#:构建连连看游戏** Visual Studio 2005 是微软推出的一款强大的集成开发环境(IDE),主要用于编写 .NET Framework 应用程序。这款 IDE 支持多种编程语言,包括 C#,C++,VB.NET 等。在...

    C# 根据字符串生成二维码的实例代码

    在C#中生成二维码是一项常见的任务,特别是在移动应用、网页或物联网(IoT)场景中。本实例将向您展示如何使用ZXing.Net库来实现这个功能。ZXing.Net库是一个开源项目,提供了多种条码和二维码的读取与生成。 首先,...

    Manning - Windows Forms Programming with C#(带源码)

    《Windows Forms Programming with C#》是一本专注于使用C#进行Windows桌面应用开发的专业书籍,它提供了丰富的源代码供读者学习和实践。Windows Forms是.NET Framework中的一个关键组件,用于构建功能丰富的、用户...

    使用C#开发数据库应用程序(C#WinForms)4

    在WinForms中,可以使用Visual Designer创建和布局控件,如TextBox、Button和DataGridView,以及调整它们的属性和事件。 7. 事务处理:对于涉及多条数据库操作的业务逻辑,我们可以使用SqlTransaction来确保数据的...

    Visual C#图像处理程序设计实例

    在IT行业中,Visual C#是一种广泛使用的编程语言,尤其在Windows平台上的应用程序开发中占据了重要地位。本实例聚焦于Visual C#在图像处理程序设计方面的应用,这涉及到大量的图形用户界面(GUI)设计、图像处理算法...

    点击button按钮切换一个图片

    - 可以通过`IDI_ICON1`, `IDI_ICON2`等预定义ID,或者自定义ID如`IDB_IMAGE1`, `IDB_IMAGE2`。 4. **切换图片的逻辑**: - 在`OnBnClickedButton1()`函数中,获取图片控件的句柄,然后根据当前显示的图片ID来判断...

    C#实验指导书

    在提供的文件内容中,包含了关于C#实验指导书的详细知识点,以及创建简单的.NET...通过实验步骤的详细指导,学习者能够逐步掌握使用Visual Studio开发环境进行C#编程的完整流程,从而加深对.NET应用程序开发的理解。

    用Visual studio2008编写的抓图程序(C#源代码编写)

    在本文中,我们将深入探讨如何使用Visual Studio 2008和C#语言来编写一个基本的抓图程序。Visual Studio 2008是一款强大的集成开发环境(IDE),支持多种编程语言,包括C#,它为开发人员提供了丰富的工具和功能,...

    wpf实现图片的移动

    Image image = sender as Image; if (image != null) { // 获取鼠标点击时相对于图像左上角的坐标 Point mousePoint = e.GetPosition(image); // 记录当前的偏移量 _offset = new Point(image.Margin.Left - ...

    Halcond-10.0导出至C#详细教程.docx

    2. **安装 Visual Studio 2010**:安装 Visual Studio 2010,并确保安装了 C# 开发环境。 3. **准备测试图片**:准备好一张用于测试的图片文件。 #### 三、编写 Halcon 代码 1. **打开 Halcon 开发环境**:启动 ...

    C#Choose The Flag

    本篇文章将深入探讨如何使用C#来开发一个名为“Choose The Flag”(选择国旗)的窗体应用程序。这个小游戏旨在测试用户对世界各国国旗的识别能力,同时也为初学者提供了一个实践C#编程和Windows Forms应用开发的实例...

    C#Winform图标素材.rar

    button.Image = buttonIcon; } ``` 此外,还可以使用Visual Studio的设计器来直观地为控件分配图标。只需打开窗体设计器,选择控件,然后在属性窗口中找到Image属性,点击右侧的省略号按钮,从资源管理器中选择...

    Visual C# 案例开发集锦15

    《Visual C# 案例开发集锦15》是一个专为C#初学者准备的资源包,其中包含了丰富的案例代码,旨在帮助学习者更好地理解和掌握C#编程语言。在这个集合中,我们可以看到一个名为“案例5:抓图软件的实现”的项目,这将...

Global site tag (gtag.js) - Google Analytics