Присоединение DataTriggers во время выполнения - PullRequest
1 голос
/ 25 апреля 2011

Можно ли прикрепить датггеры к стилю во время выполнения? Я уже несколько раз просматривал свой (нерабочий) код и, похоже, не могу понять, где я ошибся.

Вот метод, который я использую, чтобы прикрепить стиль и триггер:

private void AttachVisibilityTrigger(Control ctrl)
{
    Style stl = new System.Windows.Style();
    DataTrigger dt = new DataTrigger();
    PropertyInfo pi = _entity.GetType().GetProperty(this.SecondaryOptions[ctrl.Name]);
    Type controlType = this.GetControlTypeForProperty(ref dt, pi); //gets the control type based on the property name and then sets the value for the DataTrigger for which I want the visibility to be hidden
    Binding b = this.GetVisibilityBindingByControlType(controlType); //returns a new Binding with the appropriate Path set that corresponds to the bound property value (e.g IsChecked for CheckBoxes, Text for TextBoxes, SelectedValue for Comboboxes, etc)

    b.ElementName = this.SecondaryOptions[ctrl.Name];
    dt.Binding = b;
    dt.Setters.Add(new Setter(Control.VisibilityProperty, System.Windows.Visibility.Hidden));

    stl.Triggers.Add(dt);
    ctrl.Style = stl;
}

1 Ответ

2 голосов
/ 04 мая 2011

Я почти уверен, что привязка просто нарушена, я создал похожие стили в коде, и они работают.

Особенно эта строка выглядит довольно подозрительно:

b.ElementName = this.SecondaryOptions[ctrl.Name];

( Если вы хотите привязать к самому элементу управления, вместо этого используйте RelativeSource. )

Вы проверили окно вывода VisualStudio на наличие ошибок привязки?

...