精华内容
下载资源
问答
  • 因此使用用户控件的方法把经常使用的前台模块制作成控件,当然用法和普通控件基本相同。 注意的地方已经用红色标记,代码如下:   控件后台代码: public partial class UC_ReagentWellTextBlock : UserControl

    首先一些人觉得WPF中前台的代码应该在前台创建,尽量不要在后台用代码创建。另外如果前台重复代码过多,编写起来非常繁琐而且修改更是头痛。因此使用用户控件的方法把经常使用的前台模块制作成控件,当然用法和普通控件基本相同。

    注意的地方已经用红色标记,代码如下:

     

    控件后台代码:

    public partial class UC_ReagentWellTextBlock : UserControl
        {
            public UC_ReagentWellTextBlock()
            {
                //界面初始化
                InitializeComponent();
    
                //我这里需要绑定两个TextBlock,因此将这两个TextBlock进行绑定,绑定的是用于中转的变量,后续看的到.
                Binding bindInformation = new Binding("InformationText") { Source = this };
                this.TextBlockInformatioin.SetBinding(TextBlock.TextProperty, bindInformation);
    
                Binding bindPosition = new Binding("PositionText") { Source = this };
                this.TextBlockPosition.SetBinding(TextBlock.TextProperty, bindPosition);
            }
    
            //声明依赖属性.
            public static readonly DependencyProperty PositionTextProperty = DependencyProperty.Register("PositionText", typeof(string), typeof(UC_ReagentWellTextBlock));
            public static readonly DependencyProperty InformationTextProperty = DependencyProperty.Register("InformationText", typeof(string), typeof(UC_ReagentWellTextBlock));
    
            //声明中转的变量
            public string PositionText
            {
                get { return (string)GetValue(PositionTextProperty); }
                set { SetValue(PositionTextProperty, value); }
            }
    
            public string InformationText
            {
                get { return (string)GetValue(InformationTextProperty); }
                set { SetValue(InformationTextProperty, value); }
            }
        }

    控件前台代码:

      <Grid>
            <Border BorderThickness="1" BorderBrush="Black">
                <Grid>
            <Button Style="{DynamicResource s_ShowButton}" />
            <TextBlock x:Name="TextBlockPosition"
                       Style="{DynamicResource s_Position}"/>
            <TextBlock x:Name="TextBlockInformatioin"
                       Style="{DynamicResource s_Info}"/>
                </Grid>
            </Border>
        </Grid>

    窗体调用控件后台:

               Binding bind2 = new Binding(bindStr);
               //数据绑定,等号后面的东西可以不用看,替换成其他的对象即可.
               well3_1.DataContext = IC_LABRARY.Instrument.Instrument.InstrumentRackSample.InstrumentWellSampleArray[2].InstrumentContainerTube.InformationManagementPatient;
               //绑定数据源,这里就是一开始想要实现的和基本控件一样的功能.
               well3_1.SetBinding(UC.UC_ReagentWellTextBlock.PositionTextProperty, bind2);
               well3_1.SetBinding(UC.UC_ReagentWellTextBlock.InformationTextProperty, bind2);


     

    窗体调用控件前台:

    <Window x:Class="IC_DEMO_UI.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:myReactionWell="clr-namespace:IC_DEMO_UI.UC"
            Title="MainWindow" Height="588.824" Width="300">
        <Window.Resources>
            <Style x:Key="S_TextBlock_No" TargetType="TextBlock">
                <Setter Property="Foreground"  Value="Blue"/>
                <Setter Property="FontFamily" Value="微软雅黑"/>
                <Setter Property="FontSize" Value="13"/>
                <Setter Property="Margin" Value="0,5,0,0"/>
                <Setter Property="HorizontalAlignment" Value="Center"/>
            </Style>
            <Style x:Key="S_TextBlock_Content" TargetType="TextBlock">
                <Setter Property="Foreground"  Value="Blue"/>
                <Setter Property="FontFamily" Value="微软雅黑"/>
                <Setter Property="FontSize" Value="13"/>
                <Setter Property="Margin" Value="0,25,0,0"/>
                <Setter Property="HorizontalAlignment" Value="Center"/>
            </Style>
            <Style x:Name="S_Boarder" x:Key="S_Border" TargetType="Border">
                <Setter Property="BorderThickness" Value="1"/>
                <Setter Property="BorderBrush" Value="Black"/>
                <Setter Property="VerticalAlignment" Value="Center"/>
                <Setter Property="HorizontalAlignment" Value="Center"/>
            </Style>
                <Style x:Key="S_ButtonWell" TargetType="{x:Type Button}">
                <Setter Property="HorizontalAlignment" Value="Center"/>
                <Setter Property="VerticalAlignment" Value="Center"/>
                <Setter Property="Margin" Value="2"/>
                <Setter Property="Width" Value="45"/>
                <Setter Property="Height" Value="45"/>
    
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Grid>
                                <Ellipse Stroke="Black">
                                    <Ellipse.Fill>
                                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                            <GradientStop Color="White" Offset="0"/>
                                            <GradientStop Color="#FF048A00" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Ellipse.Fill>
                                </Ellipse>
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                  RecognizesAccessKey="True"/>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsFocused" Value="True"/>
                                <Trigger Property="IsDefaulted" Value="True"/>
                                <Trigger Property="IsMouseOver" Value="True"/>
                                <Trigger Property="IsPressed" Value="True"/>
                                <Trigger Property="IsEnabled" Value="False"/>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Window.Resources>
        <Grid x:Name="G_MainGrid">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
       <myReactionWell:UC_ReagentWellTextBlock x:Name="well3_1" Grid.Row="0" Grid.Column="2" RenderTransformOrigin="0.424,1.627"/>
       </Grid>
    </Window>



    温馨提示:CSDN的Blog第一天不允许发带链接的文章,否则将封号哦!

    展开全文
  • 在WPF自定义控件中如果需要开放属性,则定义依赖项属性 步骤1:在cs文件中通过快捷键,新增依赖项属性 步骤二: 在Generic中绑定模板属性 第三步骤: 使用属性 第二部分: 公开事件 在设置依赖项...

    依赖项属性

    依赖项属性是WPF的特征,创建依赖项属性的步骤如下

    步骤一:

    在WPF自定义控件中如果需要开放属性,则定义依赖项属性

    步骤1:在cs文件中通过快捷键propd,新增依赖项属性

    步骤二:

    在Generic中绑定模板属性

     

    第三步骤:

    使用属性

     

    第二部分:

    公开事件

    在设置依赖项属性的基础上,可以进一步设置自定义控件的事件

    方法如下:

    增加事件的参数类

    按下图所示代码在cs文件中增加事件后台代码

    在generic 的XAML中绑定

     

    使用事件

    展开全文
  • 自定义一个简单控件,添加依赖属性,想在xmal中绑定设置依赖属性的值,绑定不起作用求问是怎么回事? ``` public partial class LabelEx : UserControl { public LabelEx() { InitializeComponent();...
  • VB.NET做的一个WPF的Demo,做了个控件。像是Windows图标一样.图片加文字,移动到图片上,图片会放大。这个demo也说明了如何建立一个自定义属性,并把UserControl中的控件属性绑定到自己定义的属性中。
  • WPF自定义控件的自定义属性绑定后不更新问题 原文:WPF自定义控件的自定义属性绑定后不更新问题 需要在绑定时设置属性变更触发 UpdateSourceTrigger=...
    原文: WPF自定义控件的自定义属性绑定后不更新问题

    需要在绑定时设置属性变更触发

    UpdateSourceTrigger=PropertyChanged

    例如:

    <Border CornerRadius="20">
                <Border.Background>
                    <ImageBrush 
                        x:Name="objBackImg" 
                        ImageSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:AnimationVideoPlayer},Path=CoverImage,UpdateSourceTrigger=PropertyChanged}"/>
                </Border.Background>
    </Border>

     

    posted on 2019-04-18 10:13 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/10727964.html

    展开全文
  • Padding="5" /> </Grid> <Grid Grid.Column="1"> ,Mode=TwoWay}" TurnMinValue="0" TurnMaxValue="80" Width="Auto" Height="Auto" x:Name="FTVB" /> </Grid> </Grid> 问题:自定义控件依赖属性绑定viewmodel...
    public FunTurnValToolBox()
            {
                InitializeComponent();
                this.DataContext = this;
                TurnValCommand = new DelegateCommand<string>(s => {
                    if (s == "UP")
                    {
                        if (TurnValue < TurnMaxValue)
                            TurnValue += 1;
                    }
                    else
                    {
                        if (TurnValue > TurnMinValue)
                        {
                            TurnValue -= 1;
                        }
                    }
                });
            }
    
     public static readonly DependencyProperty TurnValueProperty = DependencyProperty.Register("TurnValue", typeof(int), typeof(FunTurnValToolBox), new FrameworkPropertyMetadata()
            {
                PropertyChangedCallback = OnDemoChanged,
                BindsTwoWayByDefault = true
            });
            public int TurnValue
            {
                get
                {
                    return (int)GetValue(TurnValueProperty);
                }
                set
                {
                    SetValue(TurnValueProperty,value);
                }
    
            }
    
            private static void OnDemoChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                if (e.OldValue != e.NewValue)
                {
                    //逻辑处理
                }
            }
    
    
            
    
    
    
            public static DependencyProperty TurnMaxValueProperty = DependencyProperty.Register("TurnMaxValue", typeof(int), typeof(FunTurnValToolBox), new FrameworkPropertyMetadata(100)
            {
                PropertyChangedCallback = OnDemoChanged,
                BindsTwoWayByDefault = true
            });
            public int TurnMaxValue
            {
                get
                {
                    return (int)GetValue(TurnMaxValueProperty);
                }
                set
                {
                    SetValue(TurnMaxValueProperty, value);
                }
            }
    
    
            public static DependencyProperty TurnMinValueProperty = DependencyProperty.Register("TurnMinValue", typeof(int), typeof(FunTurnValToolBox), new FrameworkPropertyMetadata(0)
            {
                PropertyChangedCallback = OnDemoChanged,
                BindsTwoWayByDefault = true
            });
    
            
    
            
            public int TurnMinValue
            {
                get
                {
                    return (int)GetValue(TurnMinValueProperty);
                }
                set
                {
                    SetValue(TurnMinValueProperty, value);
                }
            }
    

    下面是另一个UserControl中的应用(部分代码),此时已经设置了UserControl的DataContext为自己定义的ViewModel,并且自定义的ViewModel已经实现了INotifyPropertyChanged接口。

    <Grid Margin="0,0,0,10">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Grid Grid.Column="0">
                        <TextBlock Text="行高" FontSize="14" Foreground="{StaticResource Normal.FontColor}" VerticalAlignment="Center" Padding="5" />
                    </Grid>
                    <Grid Grid.Column="1">
                        <local:FunTurnValToolBox TurnValue="{Binding FontLineHeight,Mode=TwoWay}" TurnMinValue="0" TurnMaxValue="80"  Width="Auto" Height="Auto" x:Name="FTVB" />
                    </Grid>
                </Grid>
    

    问题:自定义的控件的依赖属性再绑定viewmodel的属性时无法生效,这是什么问题,求大神指教!

    今天进行补充更新,问题已经得到解决!解决方案如下:

    1.将引入的viewmodle设置成DataContext之后,加上名称(例如 x:Name=“TPB”)

    <UserControl.DataContext>
            <local:TextPropertyToolBoxModel x:Name="TPB" />
    </UserControl.DataContext>
    

    2.将自定义控件(FunTurnValToolBox)的依赖属性(TurnValue)通过如下方式进行绑定即可

    <local:FunTurnValToolBox TurnValue="{Binding ElementName=TPB,Path=FontLineHeight,Mode=TwoWay}" TurnMinValue="0" TurnMaxValue="80"  Width="Auto" Height="Auto" x:Name="LineHeightBox" />
    

    3.补充:其他博客主说的修改自定义控件的依赖属性默认的 BindingMode为TwoWay其实没有任何关系,如下所示定义依赖属性依旧可以成功

    public static readonly DependencyProperty TurnValueProperty = DependencyProperty.Register("TurnValue", typeof(int), typeof(FunTurnValToolBox));
            public int TurnValue
            {
                get
                {
                    return (int)GetValue(TurnValueProperty);
                }
                set
                {
                    SetValue(TurnValueProperty,value);
                }
    
            }
    
    展开全文
  • 控件依赖属性: #region SelectionText internal static readonly DependencyPropertyKey SelectionTextPropertyKey = DependencyProperty.RegisterReadOnly( "SelectionText", typeof(string), ...
  • 这篇文章的意义是,为wpf自定义控件,定义它的专属属性,这个属性不仅仅可以在c#中使用,也可以在xaml中使用,在xaml中赋值或者绑定。 在wpf开发过程中,总会用到格式各样的控件,但是原生控件远远不能满足实际...
  • WPF 自定义控件依赖属性的简单使用 一、首先添加一个简单自定义控件UserTestControl; xaml代码如下,将背景色绑定依赖属性: <UserControl x:Class="WpfApp1.UserTestControl" xmlns=...
  • 【WPF】自定义控件依赖属性

    千次阅读 2013-05-08 16:48:07
    public partial class OmenLevel : UserControl { public OmenLevel() { InitializeComponent(); } #region 属性 public static readonly Dependen
  • 控件肯定会有显示数据的功能,而大部分数据又会来自于外界,所以我们需要写一些依赖项属性好让外界把值赋过来。可是得到了值那么又怎么才能绑定它呢?其实很简单,就是在构造里写一句DataContext = this;然后xaml...
  • 由于刚接触WPF不久,经验不足,走了很多弯路,比如本次遇到的设置自定义控件依赖属性无效问题,该依赖属性没有在自定义控件前台直接使用,只是作为一个标识通过后端代码来控制前端部分控件,依赖属性定义看起来没啥问题,...
  • 1、问题的描述:我自定义一个MyButton,该Button中包含一个TextBlock和一个Button,我想讲Text...①在自定义的空间的cs文件中定义一个string类型的依赖属性ButtonText ②在TextBlock中将他的Text属性绑定到ButtonText
  • 原先控件依赖属性写法如下 public class MyControl : Control { public double MyWidth { get => (double)GetValue(MyWidthProperty); set => SetValue(MyWidthProperty, ...
  • WPF之自定义控件及添加依赖属性

    千次阅读 2019-05-09 13:41:16
    一、问题描述 我们要自定义一个Button,不使用任何原生Button的样式效果,所以,直接继承自UserControl而不是Button,但是又要具备...所以,我们添加相应的依赖属性,并将其绑定到内部Button控件的Command和Comma...
  • WPF 用户控件UserControl 依赖属性绑定

    千次阅读 2020-08-06 11:42:56
    用户控件里面的元素也是继承用户控件的DataContext,所以是没办法用简单的Binding Path 来绑定依赖属性的。 如果不喜欢写那么一大串的绑定,可以用模板来。用TemplateBinding 是直接绑定控件依赖属性上的。 PS:...
  • 部分控件不支持数据绑定、动画,这时就需要创建自己的依赖项属性,用来解决这些问题。 2.怎么创建依赖项属性? 1>定义表示属性的对象,他是DependencyProperty类的实例。如,这里定义一个Margin属性对象: ...
  • 依赖属性实现绑定

    2012-06-05 15:24:38
    控件定义依赖属性 自定义依赖属性 自定义依赖属性实现绑定
  • 依赖属性相当于扩充了WPF标签的原有属性列表,并可以使用WPF的绑定功能,可谓是十分方便的;用户控件则相当于代码重用的一种方式;以上几点分开来还是比较好理解的,不过要用到MVVM模式中,还是要探索一番的。 我们...
  • 今天,我想总结一些 关于用依赖函数 的方式,制作自定义控件的方法。  比如说我现在想做一个ISCButton的自定义控件。那么首先,我需要建一个单独的项目专门来放着写自定义控件,在项目中重建UserControl,或者是类...
  • Android自定义控件提供颜色属性动态改变控件颜色 因为按钮的样式都是用xml文件实现的,因此颜色也是指定好的。后来想着别人要使用你的控件,颜色肯定需要和他们自己的应用搭配,所以如果要做好就需要提供一个属性,...
  • DataGrid模板列自定义控件使用,依赖属性绑定
  • WPF控件自定义TextBox控件

    千次阅读 2019-06-25 09:08:10
    自定义控件 1在现有的控件上进行扩展,增加一些新的属性方法等。 2包括一个代码文件和一个默认的主题文件。 3可以使用样式和模板。 4构建控件库的好方法。 说白了一个就是把现有自带的控件进行一定的封装变成一个新...
  • 问题:自定义控件依赖项属性和VIewModel中的变量不能双向绑定 解决思路:对比.net源码 PresentationFramework / System.Windows.Controls 原因:定义依赖项属性时没有设置OnChanged方法 解决方法:初始化时绑定...
  • WPF自定义分页控件

    千次阅读 2017-11-22 15:30:12
    在对大量数据进行可视化展示的时候,我们常常会用到分页的方法,这样一方面可以避免因大量数据在同一页上...为便于复用,可以将用于分页的内容,包括UI界面和控制逻辑,封装成一个WPF的自定义控件。  一 设计思路
  • 上一篇文章中,我演示了一个带有水印的具有清除按钮的输入框,那么这一节我准备再给输入框增加一个搜索按钮以及增加一些自定义属性和事件。本篇的工程基于【WPF实用教程3】最后的工程修改。 2. 背景知识 在上一篇...
  • WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 上面的使用动态对象加载的数据 发现一个问题 一个是卡 二是 对象数量得写死 很不开心 最后使用对象方式 也应该使用对象方式 因为业务需要 我的...
  • WPF经典教程之依赖项属性和路由事件

    千次下载 热门讨论 2014-10-05 01:10:07
    本概述介绍 WPF 属性系统以及依赖项属性的功能,这包括如何在可扩展应用程序标记语言 (XAML) 中和代码中使用现有的依赖项属性。..... (更多资源:http://cleopard.download.csdn.net/) (福利:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,727
精华内容 10,290
关键字:

自定义用户控件的依赖项属性绑定