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 就行了 ,汗。。。。
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的时候变成了如图片所示