2012-04-24 71 views
0

我正在从一个ListBox派生自定义wpf控件,并试图将某些格式应用于自定义属性。 当某个特定的自定义属性为false时,我想将某些格式应用于ListBox。 我使用下面的代码尝试应用的样式 -设置ItemContainerStyle代码

var t = new Trigger();     

var BackgroundSetter = new Setter {Property = BackgroundProperty, Value = null}; 
var BrushSetter = new Setter { Property = BorderBrushProperty, Value = null }; 

t.Setters.Add(BackgroundSetter); 
t.Setters.Add(BrushSetter); 

var s = new Style(typeof(ListBox)); 
s.Triggers.Add(t); 

editor.ItemContainerStyle.Triggers.Add(t); 

我自己也尝试没有运气以下 -

editor.ItemContainerStyle = s; 

我得到指示某个对象是不是一个错误初始化并逐步显示editor.ItemContainerStyle为null。 实际的错误信息只是说调用的目标引发了异常。

有没有人知道我可能会做错什么? 感谢

+0

如果'editor.ItemContainerStyle'为null,调用'editor.ItemContainerStyle.Triggers.Add( t)'有点问题... – 2012-04-24 14:43:38

+0

是的 - 但我怎样才能初始化ItemContainerStyle? – czuroski 2012-04-24 14:44:32

+0

也许像'editor.ItemContainerStyle = new Style()'这样的东西? – 2012-04-24 14:50:21

回答

1

我能得到这个工作 - 下面是我真正结束了使用的代码 -

public bool IsSelectable 
{ 
    get { return (bool)GetValue(IsSelectableProperty); } 
    set { SetValue(IsSelectableProperty, value); } 
} 

public static DependencyProperty IsSelectableProperty = DependencyProperty.Register("IsSelectable", typeof(bool), typeof(ListEditor), new FrameworkPropertyMetadata(true, new PropertyChangedCallback(IsSelectablePropertyChanged)) { BindsTwoWayByDefault = true }); 

private static void IsSelectablePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
    var editor = sender as ListEditor; 

    var s = new Style(typeof(ListBoxItem));     
    var enableSetter = new Setter {Property = IsEnabledProperty, Value = editor.IsSelectable}; 
    s.Setters.Add(enableSetter); 

    editor.ItemContainerStyle = s;          
}