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 が null であることが示されます。実際のエラー メッセージは、呼び出しのターゲットによって例外がスローされたことを示しているだけです。

誰かが私が間違っているかもしれないことを知っていますか? ありがとう

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 に答える