0

我正在开发一个从 ListBox 派生的自定义 wpf 控件,并尝试将一些格式应用于自定义属性。当特定的自定义属性为 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 为空。实际的错误消息只是说调用目标抛出了异常。

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

4

1 回答 1

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;                                       
}
于 2012-04-27T16:37:51.630 回答