wpf 自定义控件combobox 依赖属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf 自定义控件combobox 依赖属性相关的知识,希望对你有一定的参考价值。

我新建了一个usercontrol,里面套了一个ComboBox

代码如下
<UserControl >
<ComboBox ItemsSource="Binding Source=x:Static local:CustomCombobox.SubjectList"
SelectedItem="Binding Path=SelectedSubject,RelativeSource=RelativeSource Mode=FindAncestor, AncestorType=x:Type UserControl"
DisplayMemberPath="Code"/>
</UserControl>

自定义控件的后台代码

public partial class CustomCombobox : UserControl

public CustomCombobox()

InitializeComponent();


static CustomCombobox()

CustomCombobox.SubjectList = new List<Subject>()

new Subject("1001","cash"),
new Subject("1002","bank"),
new Subject("5505","revenue")
;

SelectedSubjectProperty = DependencyProperty.Register(
"SelectedSubject", typeof(Subject), typeof(CustomCombobox)
);


public static List<Subject> SubjectList;

public Subject SelectedSubject

get return (Subject)GetValue(SelectedSubjectProperty);
set SetValue(SelectedSubjectProperty,value);

public static DependencyProperty SelectedSubjectProperty;



辅助类:
public class Subject

public Subject(string s, string t)

this.Code = s;
this.Name = t;

public string Code get; set;
public string Name get; set;


在这个自定义控件有一个依赖项属性SelectedSubject,是为了绑定嵌套的Combobox的SelectdItem。

然后,我在其他窗口使用这个控件
<Window>
<Grid>
<local:CustomCombobox Width="100" Height="30" x:Name="customcbb" SelectedSubject="Binding Path=SelectSubject"/>
</Grid>
</Window>

后台代码:

public partial class MainWindow : Window

public MainWindow()

InitializeComponent();
this.DataContext = this;


public Subject SelectSubject

get;
set;



MainWindow 的SelectSubject属性绑定自定义控件的依赖项属性SelectedSubject,但是并没有成功关联,问题到底出在哪里呀
已解决,binding mode=twoway 就行了 ,汗。。。。

参考技术A 既然解决了我来收分吧。

WPF自定义Button控件

原先的button只支持一个Content属性,现需要增加一个ImageSource的属性,让图片在button左边,,content在右边

这个要靠依赖属性来做啦!~
第一步,写个自己的button继承类,增加字段属性
public class MyButton:Button

public ImageSource ImgSource

get return (ImageSource)GetValue(SourceProperty);
set SetValue(SourceProperty, value);


public static readonly DependencyProperty SourceProperty = DependencyProperty.Register("ImgSource", typeof(ImageSource), typeof(MyButton), null);

第二步,用blend编辑button类的模板,把TargetType="Button"改成TargetType="local:MyButton"喔!~找到ContentPresenter所在行,用以下代码代替:
<StackPanel Orientation="Horizontal">
<Image Source="TemplateBinding ImgSource"/>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="TemplateBinding ContentTemplate" Content="TemplateBinding Content" HorizontalAlignment="TemplateBinding HorizontalContentAlignment" Margin="TemplateBinding Padding" VerticalAlignment="TemplateBinding VerticalContentAlignment"/>
</StackPanel>
最后就可以直接在控件中设定啦!~
<local:MyButton Content="Button" Height="45" Width="120" Style="StaticResource ButtonStyle1" Padding="10,0,0,0" ImgSource="bandeng.jpg"/>
参考技术A Button外面加一个StackPanel
<StackPanel Orientation="Horizontal">
<Image></Image>
<Button></Button>
</StackPanel>
这种格式就可以了。

以上是关于wpf 自定义控件combobox 依赖属性的主要内容,如果未能解决你的问题,请参考以下文章

C# winform程序一个自定义的类似于combobox的下拉控件把属性Enable设置成false的时候变成了如图片所示

WPF利用依赖属性和命令编写自定义控件

WPF自定义控件 依赖属性绑定

具有依赖属性绑定到 DockPanel.Dock 附加属性的 WPF 自定义控件不起作用

WPF 自定义控件中,集合属性怎么做?

WPF自定义Button控件