2014-09-29 89 views
1

我有一個文本框。當它啓用時,我會得到一個具有剪切,複製和粘貼功能的上下文菜單。啓用和禁用文本框的不同上下文菜單

現在,當TextBox被禁用時,我想有一個不同的上下文菜單。我的意思是contextMenu應該只有1個選項,即複製。

我試圖將文本框包裹在網格中,然後我在該網格上應用上下文菜單。但它沒有區別。有沒有其他方法?

+0

那些誰標記這個問題否定的,請關注評論。 – Vishal 2014-09-29 07:14:00

回答

1

你可以把一個隱藏的標籤(包含文本框的文本)文本框的上方。

如果您的文本框被禁用,請取消隱藏標籤並使用彈出式菜單顯示您想要的任何內容。

當您啓用文本框,隱藏標籤

編輯:

例如(我使用靜態的位置,以方便),如果你有一個文本框與此座標(0,0 ,100,100),用相同的座標(0,0,100,100)在他上面添加一個隱藏的(不可見的)標籤。

聯繫彈出菜單標籤與所有你想要的選項(如複製,導出,無論)。

現在,如果用戶點擊文本框,他應該會收到所有的文本框選項,但是如果文本框被禁用,用戶應該點擊標籤而不是文本框,因此他應該收到您用彈出窗口決定的內容,上菜單。

注意事項我不記得你是否可以滾動標籤。無論如何,你可以把標籤放在一個佈局中,它會像一個文本框(帶滾動...)

+0

你能詳細點嗎? – Vishal 2014-09-29 07:33:35

+0

謝謝。我已經整理出修復,然後使用你的技巧,效果很好。 – Vishal 2014-09-29 10:44:21

+0

:)享受和祝你好運 – AsfK 2014-09-29 10:45:51

4

您可以使用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"

+0

我無法使用IsReadOnly。我必須使它成爲Disabled。因爲我也在處理拖放操作。 – Vishal 2014-09-29 07:21:52

+0

另外,我剛剛給了一個副本的例子。但我想爲禁用的文本框有不同的選項。 – Vishal 2014-09-29 07:23:23

+2

@Vishal也許你應該詳細說明你正在嘗試做什麼,因爲Adrian是正確的:如果它被禁用,你不應該與它互動。必須有一種更加用戶友好的方式來實現你想要的。 – 2014-09-29 07:27:27