2010-01-04 6 views
4

데이터 트리거로 사용하려는 사용자 지정 종속성 속성이 있습니다. 나는 스타일과 컨트롤 템플릿을 만든WPF에서 DataTrigger로 사용자 지정 종속성 속성 사용

public static readonly DependencyProperty BioinsulatorScannedProperty = 
    DependencyProperty.Register(
     "BioinsulatorScanned", 
     typeof(bool), 
     typeof(DisposablesDisplay), 
     new FrameworkPropertyMetadata(false)); 

    public bool BioinsulatorScanned 
    { 
     get 
     { 
      return (bool)GetValue(BioinsulatorScannedProperty); 
     } 
     set 
     { 
      SetValue(BioinsulatorScannedProperty, value); 
     } 
    } 

: 여기에 뒤에 코드입니다. 내 목표는 종속성 소품이 true로 설정된 경우 성공적으로 프로그래밍 true로 종속 소품을 설정에도 불구하고 ...

<Style x:Key="TreatEye" TargetType="Label"> 
     <Setter Property="Foreground" Value="#d1d1d1" /> 
     <Setter Property="FontWeight" Value="Bold" /> 
     <Setter Property="FontSize" Value="30" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Label"> 
        <Canvas>        
         <TextBlock x:Name="bioinsulatorText" 
            Canvas.Left="21" Canvas.Top="33" 
            Text="Bioinsulator" /> 
         <TextBlock Canvas.Left="21" Canvas.Top="70" 
            Text="KXL Kit" /> 
        </Canvas> 

        <ControlTemplate.Triggers> 
         <DataTrigger Binding="{Binding BioinsulatorScanned}" 
            Value="True"> 
          <Setter TargetName="bioinsulatorText" 
            Property="Foreground" Value="Black" /> 
         </DataTrigger> 
        </ControlTemplate.Triggers> 

       </ControlTemplate> 
      </Setter.Value> 
     </Setter>    
    </Style> 

를 텍스트의 색상을 변경하는 것입니다,이 트리거 조건은 발사하지 않았다. 이것은 디버그하는 진짜 고통입니다! 사전에

감사합니다.

+0

어떤 개체에 종속성 속성을 정의 했습니까? –

+0

정확히 이해할 수 없지만 ControlTemplate.Triggers 섹션의 종속성 속성을 사용하려고합니다. 사실 일 때, 나는 "bioinsulatorText"안에 텍스트가 있어야 검정색이됩니다. – BabaBooey

답변

2

사용자가 만든 DisposableDisplay 개체 내에 종속성 속성이 정의되어있는 것 같습니다. 지정된 바인딩이 작동하려면 해당 DisposableDisplay 객체의 인스턴스를 컨트롤 (이 경우 레이블) 또는 해당 조상 중 하나 인 DataContext으로 설정해야합니다.

+0

완벽하게 작동합니다. WPF 초보자로서 데이터 바인딩이 가장 까다로운 주제 중 하나임을 발견했습니다. 어떤 경우에 DataContext를 설정할 필요가 없습니까? – BabaBooey

+0

'DataContext'는 데이터 템플릿을 사용할 때 기본적으로 설정됩니다. 데이터 템플릿은 항목 컨트롤 (목록 상자, 목록보기, 데이터 격자 등)에서 기본적으로 사용됩니다. 또한 바인딩을보다 쉽게하기 위해 모든 요소에서 datacontext를 명시 적으로 설정할 수 있습니다. WPF에서 가장 중요한 개념 중 하나입니다. –

3

이 경우 필자는 FirstLevelProperty 종속성 속성을 기반으로하는 datatrigger를 사용하여 버튼의 가시성을 전환합니다.

public static readonly DependencyProperty FirstLevelProperty = DependencyProperty.Register("FirstLevel", typeof(string), typeof(MyWindowClass)); 

public string FirstLevel 
     { 
      get 
      { 
       return this.GetValue(FirstLevelProperty).ToString(); 
      } 

      set 
      { 
       this.SetValue(FirstLevelProperty, value); 
      } 
     } 

당신 바인딩 RelativeSource를 사용하여 윈도우 (이 경우에) 포함 된 종속성 속성 FirstLevel(Property)을 참조 할 수있다. 또한 스타일의 기본 설정을 지정해야하며, 이는 datatrigger에 의해 무시됩니다.

<Button.Style> 
    <Style TargetType="Button"> 
     <Style.Triggers> 
      <DataTrigger 
      Binding="{Binding Path=FirstLevel, 
      RelativeSource={RelativeSource FindAncestor, 
      AncestorType={x:Type Window}}}" 
      Value="SomeValue"> 
       <Setter Property="Visibility" 
       Value="Hidden" /> 
      </DataTrigger> 
     </Style.Triggers> 
     <Setter Property="Visibility" Value="Visible" /> 
    </Style> 
</Button.Style> 
관련 문제