2009-10-06 4 views
1

누가 말해 줄 수 :WPF Style.Trigger

<!--Style--> 
<Style x:Key="Test" TargetType="{x:Type Expander}"> 
      <Style.Triggers> 
       <Trigger Property="IsEnabled" Value="false"> 
        <Setter Property="IsExpanded" Value="false"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

<!-- Syle applyed in expander --> 
<Expander Header="Expander" Margin="40,89,118,0" Name="expander1" Height="23" VerticalAlignment="Top" > 
      <Grid> 
       <Ellipse Height="100" Margin="86,0,-8,-58" Name="ellipse1" Stroke="Black" VerticalAlignment="Bottom" />   
      </Grid> 
     </Expander> 

<!-- Code Behind --> 
     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      this.expander1.IsEnabled = false; 
     } 

나는 다른 방법으로 노력하지만 성공하지 .. 는 확장이 비활성화되었을 때 내용을 축소하는 또 다른 방법이있다.

답변

1

당신은 같은 확장기에 스타일을 적용해야합니다 명시 적으로 스타일을 적용하지 않으려면

<Expander Header="Expander" Name="expander1" Style="{StaticResource Test}" > 
... 
</Expander> 

는 다음 x:Key="Test"을 선언하지 않고, 그와 같은 범위의 모든 확장기 리소스 (예 : x:Key="Test"<Page.Resources>에 선언 한 경우 해당 특정 페이지의 모든 확장자)는 해당 스타일을 상속합니다.

+0

안녕하세요, 감사합니다. 그러나 언급 한 코드 블록을 잊어 버렸습니다. Style 태그에 참조를 넣었으므로 문제가 지속됩니다. –

0

감사합니다. 그러나 언급 한 코드 블록을 잊어 버렸습니다. Style 태그에 참조를 넣었습니다. 문제는 지속됩니다.

0

사용자가 확장기를 클릭하면 IsExpanded "로컬 값"이 설정되어 트리거보다 우선합니다. 종속성 속성 값 우선 순위에 대한 자세한 내용은 this msdn page을 참조하십시오. IsEnabled이 false 인 경우

가능한 솔루션은 "확장"영역을 숨 깁니다 템플릿의 트리거에 대한 트리거를 추가, 전체 확장기 컨트롤 템플릿을 다시 작성하는 것입니다 (IsExpanded이 false 인 경우 기본 템플릿은이 작업을 수행합니다). Blend를 사용하여 기본 템플리트를 가져올 수 있습니다. 창에 확장자를 추가하고 마우스 오른쪽 단추로 클릭 한 다음 컨텍스트 메뉴에서 템플리트 편집> 사본 편집을 선택하십시오.