2011-05-31 57 views
0

假設我有一個類似於Expander的自定義控件,並將在該擴展器中顯示多種類型的對象。我想爲每種類型的對象定義一個DataTemplate。XAML:爲擴展器中表示的ViewModel創建DataTemplate

現在我想展示特定的信息,當它沒有擴大和其他什麼時候。

通常使用擴展器它只顯示任何綁定到Header屬性的東西。

我可以以某種方式在DataTemplate中爲每個視圖定義兩個區域嗎?

難道還有其他一些很好的方法可以做到嗎?

+0

所以,如果我理解正確此,而不是此展開和摺疊,它真正顯示兩種不同的方式相同的數據之間切換? – 2011-05-31 14:11:05

+0

@Joel是的,你可以這麼說。它也可以被看作是一個包含更多信息的標題,然後是一個屬性。實際上,我將把這種風格應用到一個ListBox中,並且讓selectedItem變成擴展的,而其他的則顯示最相關的信息。 – 2011-05-31 14:16:25

回答

1

試試這個:

<DataTemplate x:Key="ExpanderItemDataTemplate"> 
     <Grid x:Name="LayoutRoot"> 
      <Grid x:Name="ExpandedContent" /> 
      <Grid x:Name="CollapsedContent" /> 
     </Grid> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=local:YourCustomControl}}" 
         Value="True"> 
       <Setter Property="Visibility" 
         TargetName="ExpandedContent" 
         Value="Visible" /> 
       <Setter Property="Visibility" 
         TargetName="CollapsedContent" 
         Value="Collapse" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=local:YourCustomControl}}" 
         Value="False"> 
       <Setter Property="Visibility" 
         TargetName="ExpandedContent" 
         Value="Collapse" /> 
       <Setter Property="Visibility" 
         TargetName="CollapsedContent" 
         Value="Visible" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 

+0

所以我會爲每種類型創建其中的一種,並將正確的視圖添加到每個網格中?可以工作。順便說說你是冰島人(Eyjafjallajökull)? – 2011-05-31 14:27:40

+0

我不是,但我真的很喜歡這個詞。 – Eyjafjallajokull 2011-05-31 17:51:39

+0

我可以這樣做嗎?在控件中使用觸發器並讓它們在dataTemplate內部的一個命名區域內進行綁定?這就是我真正想做的事情。 – 2011-06-01 10:18:09

1

你有沒有考慮簡單地使用TabControl? 例如,您可以添加兩個選項卡並對其進行設置。下面是標籤樣式代碼:

<Style TargetType="{x:Type TabPanel}"> 
     <!--Whatever you need for tab position (here center) --> 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
    </Style> 

  <ControlTemplate x:Key="TabItemTemplate" TargetType="{x:Type TabItem}"> 
       <!-- Place whatever control you want for design (grid, dockpanel... --> 
       <!-- And then the triggers you'd need for, here, color if selected or not, as an example --> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter TargetName="Border" Property="Background" Value="Blue" /> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="False"> 
         <Setter TargetName="Border" Property="Background" Value="WhiteSmoke" /> 
        </Trigger> 

       </ControlTemplate.Triggers> 
      </ControlTemplate> 

這是我想它的自然的方式。 您可以將此代碼擴展爲,例如,當您單擊唯一可見的選項卡時,添加更改選定選項卡的觸發器。 無論如何,您所描述的行爲似乎更適合與TabControlExpander

+0

感謝您的建議,如果我將這個問題搞砸了,它可以工作,但我不想擁有實際的選項卡,所以它可能會更容易,只是開始與ItemsControl。 – 2011-05-31 14:29:23