我有wpf TreeView - 綁定到一些數據。 樹視圖位於窗口的左側,分爲兩個區域,樹是導航區,右側的面板根據所選的樹節點更改內容。如何防止根據條件選擇TreeViewItem
並非樹視圖的所有節點都會生成詳細信息。 我想禁用這些節點的選擇。任何想法?
感謝
我有wpf TreeView - 綁定到一些數據。 樹視圖位於窗口的左側,分爲兩個區域,樹是導航區,右側的面板根據所選的樹節點更改內容。如何防止根據條件選擇TreeViewItem
並非樹視圖的所有節點都會生成詳細信息。 我想禁用這些節點的選擇。任何想法?
感謝
你有這樣的事情在你的源布爾屬性稱爲HasDetails
什麼?在這種情況下,你可以使用這樣的東西。在ItemContainerStyle中創建一個MultiDataTrigger,它綁定到DataContext中的HasDetails
和IsSelected
中的TreeViewItem
,如果兩者均爲True(當然,True表示HasDetails爲False :-),則啓動一個Storyboard,取消選擇新選擇的TreeViewItem
。
這將禁用選擇所有TreeViewItem
的沒有細節,但他們仍然是可擴展的。希望這是你要找的
<TreeView ...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding HasDetails}" Value="False"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetProperty="(TreeViewItem.IsSelected)">
<DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
更新
要禁用TreeViewItem
的地方HasDetails是假,你可以使用這個
<TreeView ...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsEnabled" Value="{Binding HasDetails}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
謝謝Meleak。它工作得很好,但是我失去了最後一個節點的選擇亮點。任何想法? – jama64 2011-02-01 22:19:01
@ jama64:你能達到什麼如果將樣式從屬性IsEnabled更改爲可聚焦,則需要。
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Focusable" Value="{Binding HasDetails}"/>
</Style>
</TreeView.ItemContainerStyle>
爲什麼在選擇這些節點時不顯示「無可用詳細信息」等消息?使它們不可選擇它與TreeView的功能不太一致。如果用戶點擊一個節點並且該節點沒有被選中,他的第一個想法就是點擊丟失了(沒有視覺反饋)。更不用說更容易實現了。 – 2011-02-01 23:19:33