当前位置:网站首页 / WPF / 正文

WPF技巧+问题+经验+摘记

时间:2015年07月01日 | 作者 : aaronyang | 分类 : WPF | 浏览: 4871次 | 评论 0

2015-9-11 16:58:31

            DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(UIElement.OpacityProperty, typeof(Window));

            dpd.AddValueChanged(owner, delegate { _form.Opacity = _owner.Opacity; });


2015-7-3 10:47:27

wpf的treeview,如果mvvm中设置了isselected为true的时候,如果前台对应的item没有显示,即没有获得焦点,是不会触发selected事件的


2015-06-17 15:28:11

列表测试数据快速生成 

Enumerable.Range(0, 100)

                .Select(i => new { Id = i, Name = "Name - " + i });


2015-6-15 15:36:18

后台设置宽度为 * 号

DataGridLength length=new DataGridLength(1,DataGridLengthUnitType.Star);
                lastColumn.Width = length;

2015-6-1 15:36:11

Slider高亮一段区域 SelectionStart="10"  SelectionEnd="40" Minimum="0" Maximum="100" Value="50"  IsSelectionRangeEnabled="True"


2015-6-1 15:14:51

Color color = new Color();
            //设置为红色
            color = Color.FromRgb(255, 0, 0);
            //设置为半透明的红色
            color = Color.FromArgb(100, 255, 0, 0);
            //通过字符串方式为颜色赋值,字符串格式为"#aarrggbb".前两位为透明度A,后面依次为R,G,B,并且需要十六进制数值表示
            color = (Color)ColorConverter.ConvertFromString("#FFFF0000");

2015-05-29 15:50:51

WPF的按钮,默认没有MouseDown和MouseUp,需要自己手动加

     r1.AddHandler(Button.MouseDownEvent, new RoutedEventHandler(r1_MouseDown), true);
                             r1.AddHandler(Button.MouseUpEvent, new RoutedEventHandler(r1_MouseUp), true);





  1. 当原声控件的某个属性有问题满足不了需求,属性重写

     static AyTextBox()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(AyTextBox), new FrameworkPropertyMetadata(typeof(AyTextBox)));

            TextProperty.OverrideMetadata(
                typeof(AyTextBox),
                new FrameworkPropertyMetadata(new PropertyChangedCallback(TextPropertyChanged)));
        }

2. 留个样式给用户定义

 定义个Style类型的依赖属性,然后样式中 templateBinding 自定义Style



3. [前台方式]对于前台演示demo  需要反射枚举,你可以这样做

引入   xmlns:system="clr-namespace:System;assembly=mscorlib"    

<ObjectDataProvider x:Key="placementEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
			<ObjectDataProvider.MethodParameters>
				<x:Type TypeName="PlacementMode"/>
			</ObjectDataProvider.MethodParameters>
		</ObjectDataProvider>
	<ComboBox x:Name="placementSelector" ItemsSource="{Binding Source={StaticResource placementEnum}}" IsSynchronizedWithCurrentItem="True" Width="100"  SelectedIndex="2" HorizontalAlignment="Left"/>


其他


从应用程序域创建对象

using MEFDEMO.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MEFDEMO
{
    namespace Test
    {
        public class Program
        {
            static void Main(string[] args)
            {
                var person = (Person)AppDomain.CurrentDomain
                             .CreateInstance("MEFDEMO", "MEFDEMO.Model.Person").Unwrap();
                person.ID = 1;
                person.Name = "Leslie";
                person.Age = 29;
                Console.WriteLine(string.Format("{0}'s age is {1}!", person.Name, person.Age));
                Console.ReadKey();
            }
        }
    }

    namespace Model
    {
        public class Person
        {
            public int ID
            {
                get;
                set;
            }
            public string Name
            {
                get;
                set;
            }
            public int Age
            {
                get;
                set;
            }
        }
    }

}


4. 自定义控件 ,标记某些style只能用于某个类型

[StyleTypedPropertyAttribute(Property = "ItemContainerStyle", StyleTargetType = typeof(ListViewItem))]public class ListView : ListBox



5.全局字体文字

比如,你可以在你的MainWindow中设置:

<Window x:Class="WpfApplication25.MainWindow"

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

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

        Title="MainWindow" Height="414" Width="615" FontFamily="Comic Sans MS">

 

这样在这个Window中显示的文字都是“Comic Sans MS”字体了。

再比如,你可以定义一个全局的Style,通过这个Style去设置全局的字体和尺寸:

 

<Application.Resources>

    <Style TargetType="{x:Type TextElement }">

        <Setter Property="FontFamily" Value="Comic Sans MS"/>

        <Setter Property="FontSize" Value="30"/>

    </Style>

    <Style TargetType="{x:Type TextBlock }">

        <Setter Property="FontFamily" Value="Comic Sans MS"/>

        <Setter Property="FontSize" Value="30"/>

    </Style>

</Application.Resources>

 

因为WPF使用了2个主要的control去显示文字,一个是TextElement,另一个是TextBlock,设置了这两个style,你的全局字体应该会改变。

 

另一种方案是实用“OverrideMetadata"去重新设置你应用程序的默认字体,参考:

TextElement.FontFamilyProperty.OverrideMetadata(typeof(TextElement), newFrameworkPropertyMetadata(new FontFamily("Comic Sans MS")));

TextBlock.FontFamilyProperty.OverrideMetadata(typeof(TextBlock), new FrameworkPropertyMetadata(newFontFamily("Comic Sans MS")));

 

你可以根据你的需求,选一个适合你的。





2015-05-23 14:09:32

附加 事件后台代码

  public AyTreeView()
        {
            this.AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(AyTreeViewItemExpanded)); 
        }

        private void AyTreeViewItemExpanded(object sender, RoutedEventArgs e)
        {
            TreeViewItem tvi = e.OriginalSource as TreeViewItem;
            if (tvi != null)
            {
                AyMessageBox.ShowInformation(string.Format("TreeNode '{0}' was expanded", tvi.Header));
            }
        }



获得句柄

窗体: 
IntPtr hwnd = new WindowInteropHelper(this).Handle;


控件: 
IntPtr hwnd = ((HwndSource)PresentationSource.FromVisual(uielement)).Handle;




<BooleanToVisibilityConverter x:Key="BoolToVis" />

推荐您阅读更多有关于“WPF4.5,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf,目前主maui

招聘合肥一枚WPF工程师,跟我一个开发组,10-15K,欢迎打扰

目前在合肥市企迈科技就职

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表