第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

WPF ComboBox PreviewMouseDown

WPF ComboBox PreviewMouseDown

C#
BIG陽 2023-05-13 16:10:25
我有一個(gè)可編輯的組合框和一個(gè)文本框。<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="86,149,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/><ComboBox x:Name="comboBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" Margin="282,150,0,0" IsEditable="True" PreviewMouseDown="ComboBox_PreviewMouseDown"/>我不明白為什么ComboBox_PreviewMouseDown不觸發(fā),當(dāng)焦點(diǎn)在文本框上并且我單擊組合框時(shí)。它只是突出顯示組合框中的文本并設(shè)置焦點(diǎn)。當(dāng)它已經(jīng)具有焦點(diǎn)時(shí)單擊組合框,PreviewMouseDown觸發(fā)。這就是這里發(fā)生的事情嗎?為什么PreviewMouseDown沒有焦點(diǎn)的組合框中的 a 不起作用?
查看完整描述

2 回答

?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊

當(dāng)ComboBox.IsEditable設(shè)置為 時(shí)True,ComboBox內(nèi)部將焦點(diǎn)(和鍵盤焦點(diǎn))設(shè)置為編輯TextBox以使其立即可用于文本輸入。這是完全有道理的,因?yàn)閱螕艟庉嫷哪康腡extBox始終是輸入或編輯一些文本。否則,用戶必須單擊TextBox兩次才能使其獲得文本輸入的焦點(diǎn)(鍵盤焦點(diǎn))。

所以,為了防止焦點(diǎn)被竊取,作者將事件標(biāo)記MouseDown為已處理,即RoutedEventArgs.Handled設(shè)置為true。(這就是為什么大多數(shù)非預(yù)覽事件被大多數(shù)控件標(biāo)記為已處理的原因)。


TextBox此外,作者希望在第一次單擊編輯時(shí)防止插入符號移動(dòng)(以使其獲得焦點(diǎn)):如果編輯沒有鍵盤焦點(diǎn)并且下拉面板是,則PreviewMouseDown事件的RoutedEventArgs.Handled將僅設(shè)置為關(guān)閉。(這就是為什么第二次點(diǎn)擊將通過添加的事件處理程序處理)。trueTextBoxTextBox


要實(shí)現(xiàn)您期望的行為,您必須處理上的UIElement.PreviewGotKeyboardFocus事件或附加事件。Keyboard.PreviewGotKeyboardFocusComboBox


或者使用方法注冊事件處理程序UIElement.AddHandler并將handledEventsToo參數(shù)設(shè)置為true:


this.MyComboBox.AddHandler(

  UIElement.PreviewMouseDownEvent, 

  new RoutedEventHandler(MyComboBox_PreviewMouseDown), 

  true);


查看完整回答
反對 回復(fù) 2023-05-13
?
白衣染霜花

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊

我自己也遇到了同樣的問題。一個(gè)簡單而有效的解決方法是將你的包裹ComboBox在一個(gè)輕量級的中ContentPresenter,然后將你的PreviewMouseDown處理程序附加到它,如下所示:


<ContentPresenter x:Name="MyComboBoxWrapper"

    PreviewMouseDown="MyComboBoxWrapper_PreviewMouseDown">


    <ContentPresenter.Content>

        <ComboBox x:Name="MyComboBox" />

    </ContentPresenter.Content>


</ContentPresenter>

此外,由于此控件PreviewMouseDown先于事件獲取事件ComboBox,因此您不僅可以使用它在甚至看到事件之前預(yù)處理事件,還可以通過將事件 arg 的屬性設(shè)置為“true”來完全ComboBox切斷事件。ComboBoxhandled


奇跡般有效!不需要子類化或其他技巧,它只需要樹中的輕量級控件!


筆記

正如某些人可能已經(jīng)考慮的那樣,從技術(shù)上講,您可以將PreviewMouseDown事件附加到您的 的任何ComboBox祖先,但您可能必須在該處理程序中包含邏輯以確定您是否實(shí)際單擊了ComboBoxvs 其他內(nèi)容。


通過使用顯式ContentPresenter(一個(gè)難以置信的輕量級元素,它本身沒有任何呈現(xiàn)邏輯。它只是托管其他元素),您現(xiàn)在擁有一個(gè)專門用于PreviewMouseDown此控件的處理程序。另外,如果您需要四處移動(dòng)它,它會(huì)更便于攜帶,因?yàn)檫@兩個(gè)物品可以一起移動(dòng)。


查看完整回答
反對 回復(fù) 2023-05-13
  • 2 回答
  • 0 關(guān)注
  • 305 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號