我有一個文本框。當它啓用時,我會得到一個具有剪切,複製和粘貼功能的上下文菜單。啓用和禁用文本框的不同上下文菜單
現在,當TextBox被禁用時,我想有一個不同的上下文菜單。我的意思是contextMenu應該只有1個選項,即複製。
我試圖將文本框包裹在網格中,然後我在該網格上應用上下文菜單。但它沒有區別。有沒有其他方法?
我有一個文本框。當它啓用時,我會得到一個具有剪切,複製和粘貼功能的上下文菜單。啓用和禁用文本框的不同上下文菜單
現在,當TextBox被禁用時,我想有一個不同的上下文菜單。我的意思是contextMenu應該只有1個選項,即複製。
我試圖將文本框包裹在網格中,然後我在該網格上應用上下文菜單。但它沒有區別。有沒有其他方法?
你可以把一個隱藏的標籤(包含文本框的文本)文本框的上方。
如果您的文本框被禁用,請取消隱藏標籤並使用彈出式菜單顯示您想要的任何內容。
當您啓用文本框,隱藏標籤
編輯:
例如(我使用靜態的位置,以方便),如果你有一個文本框與此座標(0,0 ,100,100),用相同的座標(0,0,100,100)在他上面添加一個隱藏的(不可見的)標籤。
聯繫彈出菜單標籤與所有你想要的選項(如複製,導出,無論)。
現在,如果用戶點擊文本框,他應該會收到所有的文本框選項,但是如果文本框被禁用,用戶應該點擊標籤而不是文本框,因此他應該收到您用彈出窗口決定的內容,上菜單。
注意事項我不記得你是否可以滾動標籤。無論如何,你可以把標籤放在一個佈局中,它會像一個文本框(帶滾動...)
您可以使用TextBox的IsReadOnly屬性而不是禁用它。這將處理上下文菜單,這意味着唯一啓用的選項將是複製。
禁用TextBox會告訴用戶它不能與它進行交互,如果它是隻讀的,它具有略微不同的視覺風格,表明它仍然可以與之交互。
編輯
如果你在一個MVVM方案,並希望在文本菜單的動態項目僅僅是文本菜單的的ItemsSource綁定到一個集合根據需要,你可以修改。
編輯2
從XAML解決這個問題只有你的所有項目添加到同一文本菜單和菜單項,將基於父的IsEnabled屬性隱藏他們創造一個風格:
<Style TargetType="MenuItem" x:Key="menuItemStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=IsEnabled}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
要在禁用的項目顯示文本菜單,你可以使用:ContextMenuService.ShowOnDisabled="True"
那些誰標記這個問題否定的,請關注評論。 – Vishal 2014-09-29 07:14:00