2014-02-06 57 views
2

我無法弄清楚如何在XAML中執行此操作。我想出了使用擴展/摺疊事件的解決方法,但他們感覺不對。展開後修改擴展器頭部子節點

我有一個數據網格,有組,模板作爲擴展。我在擴展器內部有一個按鈕,默認情況下是隱藏的,只有當擴展器展開時才需要顯示。

<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> 

所以基本上有問題的代碼是正中:

<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

你必須移動DataTrigger在ControlTemplate這樣的:

<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

  • 在安裝員沒有TargetProperty屬性,但有目標名稱

+1

謝謝。我不相信我錯過了它。你甚至不想知道我花了多少時間試圖弄清楚。我甚至有一個TemplateSelectors的版本:)。 – Eternal21