从代码中设置ItemContainerStyle

时间:2012-04-24 14:39:57

标签: wpf wpf-controls

我正在开发一个自定义的wpf控件,它是从ListBox派生的,我正在尝试将一些格式应用于自定义属性。 当特定的自定义属性为false时,我想将一些格式应用于ListBox。 我使用以下代码尝试应用样式 -

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。 实际的错误消息只是说调用的目标抛出了异常。

有谁知道我可能做错了什么? 感谢

1 个答案:

答案 0 :(得分: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;                                       
}