2014-02-06 4 views
2

XAML에서이를 수행하는 방법을 알 수 없습니다. Expanded/Collapsed 이벤트를 사용하는 해결 방법을 생각해 냈지만 그다지 옳지 않다고 생각합니다.확장시 확장기 헤더 자식 수정

확장기로 템플릿 화 된 그룹이있는 DataGrid가 있습니다. 나는 익스팬더 내부에 버튼을 가지고 있는데, 이것은 기본적으로 숨겨져 있으며, 익스팬더가 확장 될 때만 보여 져야합니다.

<GroupStyle.ContainerStyle> 
    <Style TargetType="{x:Type GroupItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}">           
        <Expander IsExpanded="True"> 
         <Expander.Header> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="Some Text"/> 
           <Button Name="MyButton" Visibility="Collapsed" Content="Add All"/>              
          </StackPanel> 
         </Expander.Header> 
         <Expander.Content> 
          <ItemsPresenter /> 
         </Expander.Content> 
        </Expander> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</GroupStyle.ContainerStyle> 

그래서 기본적으로 문제의 코드는 오른쪽 중간에 : 확장기가 확장 될 때 나는 false로 버튼의 가시성을 설정하기 위해 노력하고있어

<Expander IsExpanded="True"> 
    <Expander.Header> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="Some Text"/> 
      <Button Name="MyButton" Visibility="Collapsed" Content="Add All"/>              
     </StackPanel> 
    </Expander.Header> 
    <Expander.Content> 
     <ItemsPresenter /> 
    </Expander.Content> 
</Expander> 

.

<Expander.Style> 
    <Style TargetType="Expander"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsExpanded, RelativeSource={RelativeSource Self}}" Value="False"> 
       <Setter TargetProperty="MyButton" Property="Visibility" Value="Visible" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Expander.Style> 

을하지만 MyButton에를 찾을 수 없기 때문에 (이 헤더 내부에 있기 때문에 내가 추측하고있어) 컴파일러는 그것을 허용하지 않습니다 : 나는 다음과 같이 트리거를 사용하여 시도했다. 이 일을 어떻게 얻을 수 있는지에 대한 아이디어가 있습니까?

답변

4

이 같은 ControlTemplate에 DataTrigger를 이동해야 :

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type GroupItem}"> 
      <Expander Name="Expander" IsExpanded="True"> 
       <Expander.Header> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="Some Text" /> 

         <Button Name="MyButton" 
           Visibility="Collapsed" 
           Content="Add All" /> 
        </StackPanel> 
       </Expander.Header> 

       <Expander.Content> 
        <ItemsPresenter /> 
       </Expander.Content> 
      </Expander> 

      <ControlTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=IsExpanded, ElementName=Expander}" Value="False"> 
        <Setter TargetName="MyButton" Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

Notes

    건설 RelativeSource={RelativeSource Self} 포인트는 자신을 제어 할 수 있기 때문에 명시 적으로, 확장기의 이름을 설정
  • , 그리고 GroupItem에 속성이 없습니다 IsExpanded입니다.

  • In Setter에는 TargetProperty 속성이 없지만 대상 이름이 있습니다.

+1

감사합니다. 나는 그것을 놓쳤다는 것을 믿을 수 없다. 당신은 내가 그것을 알아 내려고 얼마나 많은 시간을 낭비했는지 알고 싶지도 않습니다. TemplateSelectors가있는 버전도 있습니다. :) – Eternal21