假設我有一個類似於Expander的自定義控件,並將在該擴展器中顯示多種類型的對象。我想爲每種類型的對象定義一個DataTemplate。XAML:爲擴展器中表示的ViewModel創建DataTemplate
現在我想展示特定的信息,當它沒有擴大和其他什麼時候。
通常使用擴展器它只顯示任何綁定到Header屬性的東西。
我可以以某種方式在DataTemplate中爲每個視圖定義兩個區域嗎?
難道還有其他一些很好的方法可以做到嗎?
假設我有一個類似於Expander的自定義控件,並將在該擴展器中顯示多種類型的對象。我想爲每種類型的對象定義一個DataTemplate。XAML:爲擴展器中表示的ViewModel創建DataTemplate
現在我想展示特定的信息,當它沒有擴大和其他什麼時候。
通常使用擴展器它只顯示任何綁定到Header屬性的東西。
我可以以某種方式在DataTemplate中爲每個視圖定義兩個區域嗎?
難道還有其他一些很好的方法可以做到嗎?
試試這個:
<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>
所以我會爲每種類型創建其中的一種,並將正確的視圖添加到每個網格中?可以工作。順便說說你是冰島人(Eyjafjallajökull)? – 2011-05-31 14:27:40
我不是,但我真的很喜歡這個詞。 – Eyjafjallajokull 2011-05-31 17:51:39
我可以這樣做嗎?在控件中使用觸發器並讓它們在dataTemplate內部的一個命名區域內進行綁定?這就是我真正想做的事情。 – 2011-06-01 10:18:09
你有沒有考慮簡單地使用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>
這是我想它的自然的方式。 您可以將此代碼擴展爲,例如,當您單擊唯一可見的選項卡時,添加更改選定選項卡的觸發器。 無論如何,您所描述的行爲似乎更適合與TabControl
比Expander
感謝您的建議,如果我將這個問題搞砸了,它可以工作,但我不想擁有實際的選項卡,所以它可能會更容易,只是開始與ItemsControl。 – 2011-05-31 14:29:23
所以,如果我理解正確此,而不是此展開和摺疊,它真正顯示兩種不同的方式相同的數據之間切換? – 2011-05-31 14:11:05
@Joel是的,你可以這麼說。它也可以被看作是一個包含更多信息的標題,然後是一個屬性。實際上,我將把這種風格應用到一個ListBox中,並且讓selectedItem變成擴展的,而其他的則顯示最相關的信息。 – 2011-05-31 14:16:25