美文网首页
WPF中使用Windows.Controls.Ribbon创建一

WPF中使用Windows.Controls.Ribbon创建一

作者: Ritchie_Li | 来源:发表于2022-05-03 15:04 被阅读0次

Windows系统自带的画图工具很完善的,如下代码只是演示创建一个简易的画板,可以做教学使用。

整体效果如下:

1. 添加组件System.Windows.Controls.Ribbon

2. 界面设计

<Window x:Class="PEN.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:PEN"

        mc:Ignorable="d"

        Background="#FF73DC73"

        Title="演示画板" Height="450" Width="800">

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition Height="Auto" />

            <RowDefinition Height="*"/>

        </Grid.RowDefinitions>

        <Ribbon x:Name="ribbon" Grid.Row="0">

            <Ribbon.Resources>

                <Style TargetType="RibbonRadioButton">

                    <Setter Property="CornerRadius" Value="13"/>

                    <Setter Property="Margin" Value="5 0 0 0"/>

                    <EventSetter Event="Checked" Handler="RibbonRadioButton_Checked"/>

                </Style>

            </Ribbon.Resources>

            <Ribbon.ApplicationMenu>

                <RibbonApplicationMenu Visibility="Collapsed"/>

            </Ribbon.ApplicationMenu>

            <RibbonTab x:Name="rt1" Header="画板 ">

                <RibbonGroup Header="笔画类型">

                    <RibbonRadioButton x:Name="rrbPen" Label="钢笔" IsChecked="True" LargeImageSource="Images/P1.png"/>

                    <RibbonRadioButton x:Name="rrbHighlighter" LargeImageSource="Images/P2.png" Label="荧光笔"/>

                </RibbonGroup>

                <RibbonGroup Header="钢笔颜色">

                    <RibbonRadioButton Label="红色" IsChecked="True"  LargeImageSource="Images/red.png"/>

                    <RibbonRadioButton Label="绿色"  LargeImageSource="Images/green.png"/>

                    <RibbonRadioButton Label="蓝色"  LargeImageSource="Images/blue.png"/>

                </RibbonGroup>

                <RibbonGroup Header="编辑选项">

                    <RibbonRadioButton x:Name="rrbInk" Label="墨迹" IsChecked="True" LargeImageSource="Images/b1.png"  GroupName="edit" />

                    <RibbonRadioButton Label="手势" GroupName="edit" LargeImageSource="Images/hand.png"  />

                    <RibbonRadioButton Label="套索选择" LargeImageSource="Images/config.png"  GroupName="edit" />

                    <RibbonRadioButton Label="点擦除" LargeImageSource="Images/erase2.png"  GroupName="edit" />

                    <RibbonRadioButton Label="笔画擦除" LargeImageSource="Images/erase1.png" GroupName="edit" />

                </RibbonGroup>

            </RibbonTab>

        </Ribbon>

        <InkCanvas Name="ink1" Grid.Row="1" Background="#FFFFF9F5"/>

    </Grid>

</Window>

设计效果:

3. 后台代码设计

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Ink;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Windows.Controls.Ribbon;

namespace PEN

{

    /// <summary>

    /// MainWindow.xaml 的交互逻辑

    /// </summary>

    public partial class MainWindow : Window

    {

        private DrawingAttributes inkDA;

        private DrawingAttributes highlighterDA;

        private Color currentColor;

        public MainWindow()

        {

            InitializeComponent();

            currentColor = Colors.Red;

            inkDA = new DrawingAttributes()

            {

                Color = currentColor,

                Height = 6,

                Width = 6,

                FitToCurve = false

            };

            highlighterDA = new DrawingAttributes()

            {

                Color = Colors.Orchid,

                IsHighlighter = true,

                IgnorePressure = false,

                StylusTip = StylusTip.Rectangle,

                Height = 30,

                Width = 10

            };

            ink1.DefaultDrawingAttributes = inkDA;

            ink1.EditingMode = InkCanvasEditingMode.Ink;

        }

        private void RibbonRadioButton_Checked(object sender, RoutedEventArgs e)

        {

            string name = (e.Source as RibbonRadioButton).Label;

            switch (name)

            {

                case "钢笔":

                    InitColor();

                    ink1.EditingMode = InkCanvasEditingMode.Ink;

                    break;

                case "荧光笔":

                    highlighterDA = new DrawingAttributes()

                    {

                        Color = currentColor ,

                        IsHighlighter = true,

                        IgnorePressure = false,

                        StylusTip = StylusTip.Rectangle,

                        Height = 30,

                        Width = 10

                    };

                    ink1.DefaultDrawingAttributes = highlighterDA;

                    break;

                case "红色":

                    currentColor = Colors.Red;

                    InitColor();

                    break;

                case "绿色":

                    currentColor = Colors.Green;

                    InitColor();

                    break;

                case "蓝色":

                    currentColor = Colors.Blue;

                    InitColor();

                    break;

                case "墨迹": ink1.EditingMode = InkCanvasEditingMode.Ink; break;

                case "手势": ink1.EditingMode = InkCanvasEditingMode.GestureOnly; break;

                case "套索选择": ink1.EditingMode = InkCanvasEditingMode.Select; break;

                case "点擦除": ink1.EditingMode = InkCanvasEditingMode.EraseByPoint; break;

                case "笔画擦除": ink1.EditingMode = InkCanvasEditingMode.EraseByStroke; break;

            }

        }

        private void InitColor()

        {

            inkDA.Color = currentColor;

            rrbPen.IsChecked = true;

            ink1.DefaultDrawingAttributes = inkDA;

        }

    }

}

可做简单的教学演示工具,可以做演算的小白板。

相关文章

网友评论

      本文标题:WPF中使用Windows.Controls.Ribbon创建一

      本文链接:https://www.haomeiwen.com/subject/yjabyrtx.html