精华内容
下载资源
问答
  • 使用WPF实现的简单的文件及文件夹的浏览界面,纯后台C#代码,没有使用XAML。 使用VS2015编译,测试通过。 界面比较简单,但是可行,欢迎大家继续补充。 水平有限,敬请批评。
  • WPF实现简单的文件浏览界面

    千次阅读 2018-05-16 19:58:24
    使用WPF编写文件浏览界面,做的比较简单。因为没有找到合适的第三方库,所以自己手动写一个简单的先试试。没有使用XAML,纯C#代码实现。主要使用的控件Grid, TreeView, ListView,GridSplitter。 使用了两个简单...

        使用WPF编写文件浏览界面,做的比较简单。因为没有找到合适的第三方库,所以自己手动写一个简单的先试试。没有使用XAML,纯C#代码实现。主要使用的控件Grid, TreeView, ListView,GridSplitter。

        使用了两个简单的文件夹图标,使用了Binding,(这个我也不是特别熟,但是勉强用上了),编写了几个简单的类。参考了网上的一些资料和书籍,先总结如下:


        01、ImagedTreeViewItem类,继承自TreeViewItem

    using System;
    using System.Windows;
    using System.Windows.Input;
    using System.Windows.Controls;
    using System.Windows.Media;
    
    namespace LocalFileManager
    {
        /// <summary>
        /// 简单的Item类,选中和不被选中用两种图标表示
        /// 内置一个StackPanel,包括一个TextBlock显示文本,图片
        /// </summary>
        public class ImagedTreeViewItem : TreeViewItem
        {
            TextBlock text;
            Image img;
            ImageSource srcSelected, srcUnselected;
    
            /// <summary>
            /// Constructor makes stack with image and text
            /// </summary>
            public ImagedTreeViewItem()
            {
                StackPanel stack = new StackPanel();
                stack.Orientation = Orientation.Horizontal;
                Header = stack;
    
                img = new Image();
                img.VerticalAlignment = VerticalAlignment.Center;
                img.Margin = new Thickness(0, 0, 2, 0);
                stack.Children.Add(img);
    
                text = new TextBlock();
                text.VerticalAlignment = VerticalAlignment.Center;
                stack.Children.Add(text);
            }
    
            /// <summary>
            /// Public porperty for text and images
            /// </summary>
            public string Text
            {
                get { return text.Text; }
                set { text.Text = value; }
            }
    
            public ImageSource SelectedImage
            {
                get { return srcSelected; }
                set
                {
                    srcSelected = value;
    
                    if(IsSelected)
                    {
                        img.Source = srcSelected;
                    }
                }//end of set
            }//end of public Imagesource SelectedItem
    
            public ImageSource UnselectedImage
            {
                get { return srcUnselected; }
                set
                {
                    srcUnselected = value;
                    if(!IsSelected)
                    {
                        img.Source = srcUnselected;
                    }
                }//end of set
            }//end of public ImageSource UnselectedImage
    
            /// <summary>
            /// Event override to set image
            /// </summary>
            /// <param name="e"></param>
            protected override void OnSelected(RoutedEventArgs e)
            {
                base.OnSelected(e);
                img.Source = srcSelected;
            }
    
            protected override void OnUnselected(RoutedEventArgs e)
            {
                base.OnUnselected(e);
                img.Source = srcUnselected;
            }
        }
    }
    

        02、文件夹列表item,继承自ImagedTreeViewItem

    using System;
    using System.IO;
    using System.Windows;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Controls;
    using System.Windows.Media.Imaging;
    
    namespace LocalFileManager
    {
        /// <summary>
        /// 文件夹列表item,继承自ImagedTreeViewItem
        /// </summary>
        public class DirectoryTreeViewItem : ImagedTreeViewItem
        {
            DirectoryInfo dir;
    
            //Constructor requires DirectoryInfo object
            public DirectoryTreeViewItem(DirectoryInfo pDir)
            {
                this.dir = pDir;
                Text = pDir.Name;
    
                SelectedImage = new BitmapImage(new Uri("pack://application:,,/img/OPEN.BMP"));
                UnselectedImage = new BitmapImage(new Uri("pack://application:,,/img/CLOSED.BMP"));
            }
    
            /// <summary>
            /// public property to obtain DirectoryInfo
            /// </summary>
            public DirectoryInfo DirInfo
            {
                get { return dir; }
            }
    
            /// <summary>
            /// public mathod to populate wtih items
            /// </summary>
            public void Populate()
            {
                DirectoryInfo[] dirs;
    
                try
                {
                    dirs = dir.GetDirectories();
                }
                catch
                {
                    return;
                }
    
                foreach(DirectoryInfo dirChild in dirs)
                {
                    Items.Add(new DirectoryTreeViewItem(dirChild));
                }
            }
    
            /// <summary>
            /// event override to populate subitem
            /// </summary>
            /// <param name="e"></param>
            protected override void OnExpanded(RoutedEventArgs e)
            {
                base.OnExpanded(e);
    
                foreach(object obj in Items)
                {
                    DirectoryTreeViewItem item = obj as DirectoryTreeViewItem;
                    item.Populate();
                }
            }
        }
    }
    

        03、路径树,继承自TreeView

    using System;
    using System.IO;
    using System.Windows;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Controls;
    using System.Windows.Media.Imaging;
    
    namespace LocalFileManager
    {
        /// <summary>
        /// 路径树,继承自TreeView
        /// </summary>
        public class DirectoryTreeView : TreeView
        {
            /// <summary>
            /// Constructor builds
            /// </summary>
            public DirectoryTreeView()
            {
                RefreshTree();
            }
    
            public void RefreshTree()
            {
                BeginInit();
                Items.Clear();
    
                //Obtain the disk drivers
                DriveInfo[] drivers = DriveInfo.GetDrives();
    
                foreach(DriveInfo drive in drivers)
                {
                    char chDrive = drive.Name.ToUpper()[0];
                    DirectoryTreeViewItem item = new DirectoryTreeViewItem(drive.RootDirectory);
    
                    //display ...
                    if(chDrive != 'A' && chDrive != 'B' && drive.IsReady && drive.VolumeLabel.Length > 0)
                    {
                        item.Text = string.Format("{0}  ({1})", drive.VolumeLabel, drive.Name);
                    }
                    else
                    {
                        item.Text = string.Format("{0}  ({1})", drive.DriveType, drive.Name);
                    }
    
                    Items.Add(item);
    
                    if(chDrive != 'A' && chDrive != 'B' && drive.IsReady)
                    {
                        item.Populate();
                    }
                }
    
                EndInit();
            }
        }
    }
    

        04、文件信息类,自定义了几个需要显示的文件的属性

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace LocalFileManager
    {
        /// <summary>
        /// 自定义的文件信息类,用于绑定到ListViewItem中
        /// </summary>
        public class FileInfoDemo
        {
            string strFileName;
            string strFileType;
            string strFileSize;
            string _lastModifyTime;
            string _filePath;
    
            /// <summary>
            /// 文件名
            /// </summary>
            public string FileName
            {
                get { return strFileName; }
                set { strFileName = value; }
            }
    
            /// <summary>
            /// 文件类型
            /// </summary>
            public string FileType
            {
                get { return strFileType; }
                set { strFileType = value; }
            }
    
            /// <summary>
            /// 文件大小
            /// </summary>
            public string Size
            {
                get { return strFileSize; }
                set { strFileSize = value; }
            }
    
            /// <summary>
            /// 最后一次修改时间
            /// </summary>
            public string LastModifyTime
            {
                get { return _lastModifyTime; }
                set { _lastModifyTime = value; }
            }
    
            /// <summary>
            /// 文件所在路径
            /// </summary>
            public string FilePath
            {
                get { return _filePath; }
                set { _filePath = value; }
            }
        }
    }
    

        05、主界面

     ListView lvFileInfo = new ListView();
            public LocalFileManager()
            {
                Title = "LocalFileManager";
    
                //网格布局
                Grid grid = new Grid();
                Content = grid;
    
                //定义3列
                ColumnDefinition coldef = new ColumnDefinition();
                coldef.Width = new GridLength(50, GridUnitType.Star);
                grid.ColumnDefinitions.Add(coldef);
    
                coldef = new ColumnDefinition();
                coldef.Width = GridLength.Auto;
                grid.ColumnDefinitions.Add(coldef);
    
                coldef = new ColumnDefinition();
                coldef.Width = new GridLength(50, GridUnitType.Star);
                grid.ColumnDefinitions.Add(coldef);
    
                //定义文件夹树
                DirectoryTreeView mainTree = new DirectoryTreeView();
                mainTree.SelectedItemChanged += MainTree_SelectedItemChanged;
                grid.Children.Add(mainTree);
                Grid.SetColumn(mainTree, 0);
    
                //分隔条
                GridSplitter splite = new GridSplitter();
                splite.Width = 6;
                splite.ResizeBehavior = GridResizeBehavior.PreviousAndNext;
                grid.Children.Add(splite);
                Grid.SetColumn(splite, 1);
    
                //全局ListView
                lvFileInfo = new ListView();
                grid.Children.Add(lvFileInfo);
                Grid.SetColumn(lvFileInfo, 2);
    
    
                //定义字段,绑定到文件信息类中
                GridView myview = new GridView();
                lvFileInfo.View = myview;
                GridViewColumn mycolun = new GridViewColumn();
                mycolun.Header = "文件名";
                mycolun.Width = 80;
                mycolun.DisplayMemberBinding = new Binding("FileName");
                myview.Columns.Add(mycolun);
    
                mycolun = new GridViewColumn();
                mycolun.Header = "类型";
                mycolun.Width = 80;
                mycolun.DisplayMemberBinding = new Binding("FileType");
                myview.Columns.Add(mycolun);
    
                mycolun = new GridViewColumn();
                mycolun.Header = "大小";
                mycolun.Width = 80;
                mycolun.DisplayMemberBinding = new Binding("Size");
                myview.Columns.Add(mycolun);
    
                mycolun = new GridViewColumn();
                mycolun.Header = "最后修改";
                mycolun.Width = 80;
                mycolun.DisplayMemberBinding = new Binding("LastModifyTime");
                myview.Columns.Add(mycolun);
    
                mycolun = new GridViewColumn();
                mycolun.Header = "路径";
                mycolun.Width = 80;
                mycolun.DisplayMemberBinding = new Binding("FilePath");
                myview.Columns.Add(mycolun);
    
                //右键菜单添加测试
                ContextMenu myContext = new ContextMenu();
    
                MenuItem myMUItem = new MenuItem();
                myMUItem.Header = "下载";
                myMUItem.Name = "Menu01";
                myContext.Items.Add(myMUItem);
    
                myMUItem = new MenuItem();
                myMUItem.Header = "查看";
                myMUItem.Name = "FileLook";
                myMUItem.Click += FileLook_Click;
                myContext.Items.Add(myMUItem);
    
                myMUItem = new MenuItem();
                myMUItem.Header = "刷新";
                myMUItem.Name = "Menu03";
                myContext.Items.Add(myMUItem);
    
                myMUItem = new MenuItem();
                myMUItem.Header = "重命名";
                myMUItem.Name = "Menu04";
                myContext.Items.Add(myMUItem);
    
                myMUItem = new MenuItem();
                myMUItem.Header = "新建文件夹";
                myMUItem.Name = "Menu05";
                myContext.Items.Add(myMUItem);
    
                lvFileInfo.ContextMenu = myContext;
    
            }

        06、当文件夹选择改变时,调用事件查找选择的文件夹下的文件,并显示到ListView中

     /// <summary>
            /// 文件夹树改变时,查找文件夹下是否存在文件,如果存在,则显示
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void MainTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                DirectoryTreeViewItem item = e.NewValue as DirectoryTreeViewItem;
    
                //stack.Children.Clear();
                lvFileInfo.Items.Clear();
    
                FileInfo[] fileInfos;
    
                try
                {
                    fileInfos = item.DirInfo.GetFiles();
                }
                catch
                {
                    return;
                }
    
                foreach(FileInfo info in fileInfos)
                {
                    FileInfoDemo myFile = new FileInfoDemo();
                    myFile.FileName = info.Name;
                    myFile.Size = info.Length.ToString();
                    myFile.LastModifyTime = info.LastAccessTime.ToString();
                    myFile.FilePath = info.DirectoryName;
                    myFile.FileType = info.Extension;
    
                    lvFileInfo.Items.Add(myFile);
                }
            }

        完成代码请见:https://download.csdn.net/download/kakaluote81/10418964


        水平有限,欢迎指正批评。

    展开全文
  • WPF控件 文件路径选择、文件夹选择

    热门讨论 2013-07-02 17:13:25
    WPF自定义控件: 1、文件路径选择 2、文件夹选择
  • WPF开源PDF控件MoonPdf,在WPF浏览PDF文件 https://github.com/reliak/moonpdf
  • WPF浏览PDF文件

    2013-12-19 09:43:38
    WPF浏览PDF文件,使用AdobeReader控件
  • c# wpf 实现文件上传下载功能

    热门讨论 2015-01-12 15:12:37
    用到上传下载功能,因此我整理了一个Damo(使用三层架构所写),与同行们分享一下,希望对同行们有所帮助,我附带了一个数据库表,通过这个Damo可以实现将任何格式的文件上传至数据库和本地服务器,同时欢迎浏览者提出...
  • 1 var dialog = new System.Windows.Forms.FolderBrowserDialog(); 2 System.Windows.Forms.DialogResult result = dialog.ShowDialog(); Using Folder Browser Dialog in WPF...
    1             var dialog = new System.Windows.Forms.FolderBrowserDialog();
    2             System.Windows.Forms.DialogResult result = dialog.ShowDialog();

     Using  Folder Browser Dialog in WPF

    转载于:https://www.cnblogs.com/cicaday/p/4008237.html

    展开全文
  • 控件显示某个文件夹下的文件夹和DWG文件文件和文件夹前加图标,文件夹图标有打开和关闭状态显示,是自己开发过程中的测试代码。
  • 一、目的:分享一个wpf中级控件,同window系统中的资源列表控件 二、实现: 1、文件资源展示 2、在路径中点击指定文件夹自动跳转 3、前进、后退功能 4、最近浏览的位置功能 5、可配置显示文件或文件夹 三、...

    一、目的:分享一个wpf中级控件,同window系统中的资源列表控件

    二、实现:

    1、文件资源展示

    2、在路径中点击指定文件夹自动跳转

    3、前进、后退功能

    4、最近浏览的位置功能

    5、可配置显示文件或文件夹

    三、环境

    VS2019

    .NetFramework4.5

    四、示例

     

    五、下载地址

    https://github.com/HeBianGu/WPF-ControlBase.git 

    展开全文
  • 一、创建自定义控件 1、控件后台交互类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows....

    最近使用WPF比较多,过来记录一下,对比一下

    个人理解usercontrol比较适用于组合控件(比如你想要实现的控件是由多个控件组成的),customCcontrol主要是用来单独重绘控件,如button,datagrid,lable等。customCcontrol修改控件外观的方专式是可属以访问控件本身template的里的控件,然后可以对其修改样式和增加逻辑。

    而资源字典更多是通过”Seyle”标签来封装资源。在WPF中我们可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某一控件。

    一、创建自定义控件

    1、控件后台交互类

    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.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;

    namespace WPFtest
    {
        /// <summary>
        /// 按照步骤 1a 或 1b 操作,然后执行步骤 2 以在 XAML 文件中使用此自定义控件。
        ///
        /// 步骤 1a) 在当前项目中存在的 XAML 文件中使用该自定义控件。
        /// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根 
        /// 元素中:
        ///
        ///     xmlns:MyNamespace="clr-namespace:WPFtest"
        ///
        ///
        /// 步骤 1b) 在其他项目中存在的 XAML 文件中使用该自定义控件。
        /// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根 
        /// 元素中:
        ///
        ///     xmlns:MyNamespace="clr-namespace:WPFtest;assembly=WPFtest"
        ///
        /// 您还需要添加一个从 XAML 文件所在的项目到此项目的项目引用,
        /// 并重新生成以避免编译错误:
        ///
        ///     在解决方案资源管理器中右击目标项目,然后依次单击
        ///     “添加引用”->“项目”->[浏览查找并选择此项目]
        ///
        ///
        /// 步骤 2)
        /// 继续操作并在 XAML 文件中使用控件。
        ///
        ///     <MyNamespace:FirstCustomControl/>
        ///
        /// </summary>
        [TemplatePart(Name = FirstCustomControl.ElementDateTimeTextBox, Type = typeof(TextBlock))]
        [TemplatePart(Name = FirstCustomControl.ElementContentTextBox, Type = typeof(TextBlock))]
        public  class FirstCustomControl : Control
        {
            private const string ElementDateTimeTextBox = "PART_DateTimeTextBox";
            private const string ElementContentTextBox = "PART_ContentTextBox";
            TextBlock dateTimeTB = null;
            TextBlock contentMsgTB = null;
            public FirstCustomControl()
            {
                DefaultStyleKeyProperty.OverrideMetadata(typeof(FirstCustomControl), new FrameworkPropertyMetadata(typeof(FirstCustomControl)));
                ContentMsg = "Hello World";
                DateTimeMsg = "DateTime";
            }
            public override void OnApplyTemplate()
            {
                base.OnApplyTemplate();

                dateTimeTB = GetTemplateChild(ElementDateTimeTextBox) as TextBlock;
                contentMsgTB = GetTemplateChild(ElementContentTextBox) as TextBlock;
            }
            /// <summary>
            /// Registers a dependency property as backing store for the Content property
            /// </summary>
            public static readonly DependencyProperty ContentMsgProperty =
                DependencyProperty.Register("ContentMsg", typeof(object), typeof(FirstCustomControl),
                new FrameworkPropertyMetadata(null,
                      FrameworkPropertyMetadataOptions.AffectsRender |
                      FrameworkPropertyMetadataOptions.AffectsParentMeasure));
     
            /// <summary>
            /// Gets or sets the Content.
            /// </summary>
            /// <value>The Content.</value>
            public object ContentMsg
            {
                get { return (object)GetValue(ContentMsgProperty); }
                set { SetValue(ContentMsgProperty, value); }
            }
     
            public static readonly DependencyProperty DateTimeMsgProperty =
                DependencyProperty.Register("DateTimeMsg", typeof(object), typeof(FirstCustomControl),
                new FrameworkPropertyMetadata(null,
                      FrameworkPropertyMetadataOptions.AffectsRender |
                      FrameworkPropertyMetadataOptions.AffectsParentMeasure));
            public object DateTimeMsg
            {
                get
                {
                    return (object)GetValue(DateTimeMsgProperty);
                }
                set
                {
                    SetValue(DateTimeMsgProperty, value);
                }
            }
        } 
    }
    2、样式Generic.xaml

    <Style TargetType="{x:Type local:FirstCustomControl}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:FirstCustomControl}">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock x:Name="PART_DateTimeTextBox" Text="{TemplateBinding DateTimeMsg}"/>
                            <TextBlock x:Name="PART_ContentTextBox" Text="{TemplateBinding ContentMsg}"/>
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    3、应用

         <local:FirstCustomControl  x:Name="mycustom" HorizontalAlignment="Left" Margin="55,30,0,0" VerticalAlignment="Top"/>

    4、页面访问

    可通过依赖属性  MessageBox.Show(this.mycustom.ContentMsg.ToString());

    二、资源字典

    1、创建资源字典

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                        xmlns:local="clr-namespace:WPFtest"
                        x:Class="WPFtest.DicEvent" >
        <local:RotationManager x:Key="p"></local:RotationManager>
        <local:NumberConverter x:Key="NumberConverter"></local:NumberConverter> 
           <Style TargetType="Button" x:Key="ButtonImage">
            <Setter Property="Background" Value="Transparent" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                       
                        <Grid Background="{TemplateBinding Background}">
                            <StackPanel HorizontalAlignment="Left">
                                <Button Name="my" Click="liClick_Click" Background="Red" Content="点我啊"></Button>
                            </StackPanel>
                            <StackPanel  HorizontalAlignment="Right">
                                <TextBox Name="texbox2" Text="{Binding Source={StaticResource p},Path=Angle,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Height="50" Width="100"></TextBox>
                                <!--<TextBox Name="texbox2" Text="{Binding RelativeSource={RelativeSource  RotationManager.Angle}}"  Height="50" Width="100"></TextBox>-->
                                <!--<TextBox Name="texbox2" Text="{Binding Source=local:RotationManager.Angle,Path=value, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"  Height="50" Width="100"></TextBox>-->
                                <!--<TextBox Name="texbox1" Text="{TemplateBinding local:RotationManager.Angle}"  Height="50" Width="100"></TextBox>-->
                                <!--<Label Name="texbox1" Content="{TemplateBinding local:RotationManager.Angle,Converter={StaticResource ResourceKey=NumberConverter}}"  Height="50" Width="100"></Label>-->
                            </StackPanel>
                            <ContentPresenter></ContentPresenter>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

    2、资源字典后台处理类

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Controls.Primitives;
    using System.Windows.Data;
    using System.Windows.Media;
    namespace WPFtest
    {
        public partial class DicEvent : ResourceDictionary
        {
            public void liClick_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show(((sender as Button).TemplatedParent).GetValue(RotationManager.AngleProperty).ToString());
                ((sender as Button).TemplatedParent).SetValue(RotationManager.AngleProperty, "1111111");
                MessageBox.Show(((sender as Button).TemplatedParent).GetValue(RotationManager.AngleProperty).ToString());

                //省去处理,如果显示,表明调用成功。
                //System.Windows.Forms.MessageBox.Show("点击了资源字典的控件!");

            }
            public void my_MouseEnter(object sender, RoutedEventArgs e)
            {
                System.Windows.Forms.MessageBox.Show("你成功dd了!");

            }

        }

        public class myattach : DependencyObject
        {
            public static string GetGrade(DependencyObject obj)
            {
                return (string)obj.GetValue(GradeProperty);
            }

            public static void SetGrade(DependencyObject obj, string value)
            {
                obj.SetValue(GradeProperty, value);
            }

            public static readonly DependencyProperty GradeProperty =
                DependencyProperty.RegisterAttached("attach", typeof(string), typeof(myattach), new UIPropertyMetadata("isattach"));

        }

       

    }
    3、数值转换器

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Data;

    namespace WPFtest
    {
        [ValueConversion(typeof(int), typeof(string))]
        public class NumberConverter : IValueConverter
        {
            //源属性传给目标属性时,调用此方法ConvertBack
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                int c = System.Convert.ToInt32(parameter);

                if (value == null)
                    throw new ArgumentNullException("value can not be null");

                int index = System.Convert.ToInt32(value);
                if (index == 0)
                    return "Blue";
                else if (index == 1)
                    return "Red";
                else
                    return "Green";
            }

            //目标属性传给源属性时,调用此方法ConvertBack
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                return null;
            }
        } 
    }

    三、用户控件

    1、创建控件模板

    <UserControl x:Class="XXX.自定义控件.MyNumericUpDown"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:XXX.自定义控件"
                 mc:Ignorable="d" 
                 d:DesignHeight="30" d:DesignWidth="120">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto"/>
                <ColumnDefinition Width="40*"/>
                <ColumnDefinition Width="40*"/>
            </Grid.ColumnDefinitions>

            <TextBox Name="TextBox_Num" Grid.Column="0" Text="1" FontSize="20" TextAlignment="Center" MinWidth="40" VerticalContentAlignment="Center"/>
            <Button Name="Button_Add" Grid.Column="1" Content="加" Click="Button_Add_Click" Background="Aqua"/>
            <Button Name="Button_Sub" Grid.Column="2" Content="减" Click="Button_Sub_Click" Background="Aqua"/>
            
        </Grid>
    </UserControl>

    2、编写后台代码

    /// <summary>
        /// MyNumericUpDown.xaml 的交互逻辑
        /// </summary>
        public partial class MyNumericUpDown : UserControl
        {

            /// <summary>
            /// 当前值
            /// </summary>
            public int Num
            {
                get
                {
                    int value = 0;
                    this.Dispatcher.Invoke(new Action(() =>
                        value = Convert.ToInt32(this.TextBox_Num.Text.Trim())
                    ));
                    return value;
                }
                set
                {
                    this.Dispatcher.Invoke(new Action(() =>
                    {
                        this.TextBox_Num.Text = value.ToString();
                    }));                
                }
            }

            public MyNumericUpDown()
            {
                InitializeComponent();
            }
            
            private void Button_Add_Click(object sender, RoutedEventArgs e)
            {
                int num = int.Parse(this.TextBox_Num.Text.Trim());
                if (num > 0)
                {
                    this.TextBox_Num.Text = (num + 1).ToString();
                }
            }

            private void Button_Sub_Click(object sender, RoutedEventArgs e)
            {
                int num = int.Parse(this.TextBox_Num.Text.Trim());
                if (num > 0)
                {
                    if ((num - 1) == 0)
                        return;
                    this.TextBox_Num.Text = (num - 1).ToString();
                }
            }
        }

    三、使用控件

    xmlns:z="clr-namespace:XXX.自定义控件"  //Windows标签中声明命名空间
    <z:MyNumericUpDown x:Name="MyNumericUpDown_PageNum" Width="120" Height="30"></z:MyNumericUpDown>
    展开全文
  • Spire.Office for WPF 试用版 试用版 开发语言: .NET 可用平台: Visual Studio 2010/2012/2013 当前版本: v4.1 Spire.Office for WPF是一款包含e-iceblue所有WPF组件的套包,包括
  • WPF文件选择

    2021-02-04 14:59:05
    WPF文件选择1.选择文件的后台代码:2.选择文件夹 1.选择文件的后台代码: 在wpf框架中使用文件框选择文件比较容易实现,可以直接使用Microsoft.Win32.OpenFIleDialog类,后台代码如下: // 实例化一个文件选择对象 ...
  • 带有浏览文件按钮的TextBox 稳定的 目录选择器 具有浏览目录按钮的TextBox 稳定的 DockPanelSplitter DockPanel的分配器 稳定的 旋转控制 数字向上/向下微调器控件 稳定的 链接块 TextBlock上的超链接 稳
  • WPF 使用自定义控件库CustomControl实现控件在其他项目使用介绍操作流程使用VS2019创建自定义用户控件库在创建的自定义控件项目中添加你的代码生成解决方案并添加到其他WPF项目中 介绍 本文的目的旨在记录在WPF项目...
  • wpf webBrowser控件

    万次阅读 2018-04-12 09:28:24
    wpf webBrowser控件介绍WebBrowsers可以让我们在窗体中进行导航网页。 WebBrowser控件内部使用ie的引擎,因此使用WebBrowser我们必须安装ie浏览器(windows默认安装的)。使用直接在xmal中使用webBrowser控件...
  • WPF 浏览PDF 文件

    2019-09-22 01:10:30
    添加成功后会在工具箱里看到...因为Adobe PDF Reader COM 组件是不支持WPF的,为此我们需要将它放到WinForm 控件中。所以,在列表中需要选择User Control,而不是User Control(WPF)。这里我将控件命名为:AdobeRe...
  • WPF:GIF控件

    2019-09-11 12:21:52
    近期使用SVN遇到问题记录前言文件更新冲突clean up异常文件夹更新冲突 前言 SVN客户端版本 1.12.0.28568-x64 文件更新冲突 现象:文件图标带黄色!,错误提示信息:conflict not set 解释:文件冲突未设置解决方案 ...
  • WPF -- 控件模板 (ControlTemplate)(一)

    万次阅读 多人点赞 2018-04-11 18:05:28
    ControlTemplate(控件模板)WPF包含数据模板和控件模板,其中控件模板又包括ControlTemplate和ItemsPanelTemplate,这里讨论一下ControlTemplate。在WPF中每一个控件都有一个默认的模板,该模板描述了空间的外观以及...
  • 控件.cs文件中添加边框圆角属性调用按键资源文件编辑MyButton.xaml文件,设置样式vs默认的样式请参考:添加颜色资源设置默认样式绑定边框样式数据完整MyButton.xaml资源字典如下:生成dll新项目调用学习过程中参考的...
  • WPF开发教程

    万次阅读 多人点赞 2019-07-02 23:13:20
    ------WPF开发教程 目录 WPF基础入门.... 3 1. WPF基础之体系结构... 3 2. WPF基础之XAML. 9 3. WPF基础之基元素... 23 4. WPF基础之属性系统... 26 5. WPF基础之路由事件... 33 6. WPF基础之布局系统... ...
  • WPF中的文件浏览对话框

    千次阅读 2012-03-15 15:45:24
    WPF没有像Winform这样的OpenFileDialog控件,所以我们需要引用System.Windows.Forms; 之后就跟Winform中的一样了 System.Windows.Forms.OpenFileDialog openFileDialog1 = new System.Windows.Forms....
  • 我也刚开始接触wpf自定义控件,玩的也不是很熟,就从需求开始,一步步重现实现方式。 需求:自定义的图形控件中控制哪里显示或隐藏。 步骤1:新建项目-类库,删掉class文件。 步骤2:右键项目-添加用户控件wpf...
  • 使用wpfGauge进行仪表盘开发,首先需要在官网下载demo,并将其中的WpfGauge.dll进行引用(dll文件我已上传,也可在本文所附的CSDN链接进行下载)。开发步骤如下: 目录 一、引用WpfGauge.dll动态链接库...
  • wpf timePicker 时间选择控件

    千次阅读 2016-08-30 22:43:00
    wpf里有日期选择控件,但没有时间选择控件。其他地方也有类似的,但效果并不太好,而且复杂。所以就自己写了个。参考codeproject上的。 分两部分。 第一部分是.cs文件。也就是control控件的内部逻辑。定义相关属性...
  • 自定义控件 因为没有办法对界面可视化编辑 所以用来很少 现在实现的是 自定义控件的 自定义属性 和自定义方法 用VS 创建自定义控件后 会自动创建 Themes 文件夹和 Generic.xaml 还有自定义的类 这边是...
  • c#文件目录浏览控件,仿资源管理器

    热门讨论 2009-07-16 15:40:41
    使用winsheel开发的c#目录浏览器,已做成usercontrol控件,可以嵌入窗体使用,使用方式: 拷贝CYFolderBrowse.dll到工程, 添加为工程引用 添加为部件引用后,就可以在toolbox中看到 附件里还包括了调用例子,主要是...
  • 原文:WPFの操作文件浏览框几种方式方式1: 使用win32控件OpenFileDialog Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); ofd.DefaultExt = ".xml"; ofd....
  • WPF图片上传

    千次阅读 2019-06-03 21:39:03
    这次写WPF图片的上传是因为我在这里面学到了新的一点知识,WPF的图片上传和其他的有一点不同就是它可以获取到图片的文件路径流,并且可以根据时间和日期来改写它的路径。其次就是WPF的图片上传的作用就是可以帮助到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,200
精华内容 880
关键字:

wpf浏览文件控件