2011-04-25 2 views
1

런타임시 데이터 트리거를 스타일에 첨부 할 수 있습니까? 나는 (비 작동) 코드를 몇 번이나 사용해 본 결과 내가 잘못한 부분을 찾을 수없는 것처럼 보였다. 내가 코드에서 비슷한 스타일을 창조하고 작동, 내가 바인딩이 바로 고장 확신런타임에 DataTriggers 연결

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; 
} 
+0

왜이 작업을 수행해야합니까? 데이터 템플릿을 사용하여이를 수행 할 수있는 방법이 있습니까? 또한 : 디버거를 사용하여 단계별로 진행 했습니까? 리플렉션이 작동합니까? 생성 된 바인딩이 의미가 있습니까? –

+0

프로젝트에서 모든 새 개체를 만드는 단일 창을 가지고 있기 때문에이 작업이 필요합니다. 윈도우의 컨트롤은 런타임에 각 객체의 속성 데이터 유형을 기반으로 생성됩니다. 다른 값이 처음 제공 될 때까지 일부 값의 입력을 방지하는 요구 사항이 제공되었습니다. 예를 들어, "재산이 손상 되었습니까? 그렇다면 설명하십시오". 그래서 부울 IsDamaged 속성에 대한 체크 박스가 있고 체크되어 있다면, 이제 DamageDescription 속성에 바인딩 된 텍스트 상자가 보이기를 원합니다. –

+0

"모든 새로운 객체의 생성을 처리하는 단일 창"은 아주 이상하게 들립니다. 어쨌든, 전에 언급했듯이 바인딩 만들기가 제대로 작동하는지 확인할 수 있습니까? 나머지는 나에게 괜찮은 것처럼 보이고 거기서 어떤 물건과 들판을 사용하는지 모른다. –

답변

2

:

는 여기에 내가 스타일과 트리거를 연결하는 데 사용하는 방법입니다.

는 특히이 라인은 매우 의심스러운 :

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

당신이 오류를 바인딩으로 VisualStudio의 출력 창을 체크하십시오. ( 것은 당신이 자체 RelativeSource 대신을 사용하여 컨트롤에 바인딩 할 경우) ?

관련 문제