2012-09-10 41 views
0

好吧,很明顯,還有更多,但這裏的基礎知識。這看起來很簡單,但不起作用。TextBox.Focus()只有在我有一個MessageBox.Show()後纔有效?

我有一個標籤。 我有一個文本框。

標籤=「1」 TextBox的Z-索引的Z-索引=「0」

即它們是在彼此的頂部和文本框是不可見的。

當用戶點擊LABEL(現在通過PreviewMouseLeftButtonDown,但在此作品後將成爲ViewModel中的命令),應用程序應該將焦點設置到TextBox。

簡單吧?錯...

如果我有這個代碼...它不起作用。

private void inVisTxtBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      inVisTxtBox.Focus(); 
//   TextBox_MouseDown(sender, e); 
     } 

如果我有這樣的代碼......它的工作

private void inVisTxtBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      inVisTxtBox.Focus(); 
//   TextBox_MouseDown(sender, e); 
      MessageBox.Show("This is ridiculous"); 
     } 

最後的XAML:

<Ctrls:AControl x:Class="<location of class>" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:CommandControls="clr-namespace:<location of custom controls>" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
    <Grid Margin="0,15,15,15"> 
     <!--<Button Height="50" Click="Button_Click">FOC</Button>--> 
     <TextBox x:Name="inVisTxtBox" Focusable="True" Grid.ZIndex="0" Width="100" Margin="5"/> 
     <Label Grid.ZIndex="1" Margin="5" Content="243234234234234" HorizontalAlignment="Left" Width="100" PreviewMouseLeftButtonDown="inVisTxtBox_PreviewMouseLeftButtonDown" 
       x:Name="KeyPress_TextBox"/> 
    </Grid> 
</Ctrls:AControl> 

編輯

如果我使標籤進入作爲它的模板,它帶有標籤的模板按鈕:

<Button x:Name="KeyPress_TextBox" Grid.ZIndex="1" Margin="5" Content="243234234234234" HorizontalAlignment="Left" Width="100" Click="KeyPress_TextBox_Click"> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Label Content="{TemplateBinding Content}"/> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

這是爲什麼?

必須與事件路由/泡泡的方式有關嗎?

我現在正在通過這樣做,但我更好奇發生了什麼。

而且......沒有下面的作品之一:

Keyboard.Focus(inVisTxtBox); 
FocusManager.SetFocusedElement(MainGrid,inVisTxtBox); 
Keyboard.Focus(inVisTxtBox); 
+0

你提到TextBox是不可見的?這是爲什麼?並且如果它實際上是隱形的,那麼在沒有實際使其可見的情況下聚焦它的意義何在? – hndr

+0

它本身不是「隱形」的。它在標籤後面。原因是我正在創建一個「Key Press」控件,它不會有焦點,但會顯示用戶輸入的內容。示例:1.用戶單擊標籤。 2. TextBox獲得焦點。 3.用戶開始輸入。 4.標籤綁定到TextBox Text屬性。 5.標籤更新但用戶看不到閃爍的光標等。 – tronious

+0

現在我很困惑。但是,如果你所要做的只是「點擊標籤時將焦點設置到文本框」,那麼上面的代碼應該可以工作,不需要消息框。你確定你在正確的地方設置了活動嗎?從事件處理程序的名稱來看,它似乎是爲TextBox生成的。 – hndr

回答

0

我複製你的代碼,它爲我工作得很好,即使previewmouseclick,別的東西似乎是問題。

可能拋出消息框停止焦點轉移到PreviewMouseLeftButtonDown事件觸發後要轉移到的任何位置。也許用戶控件本身越來越關注?

+0

沒有骰子...我已經嘗試了每一個鼠標向下的事件,你可以嘗試,我也試過每個與e.handled =真正的踢。如果你已經爲WPF打開了你的DEV環境,那麼如果你想看看我是否瘋了,那麼嘗試和複製就很容易了。創建一個標籤,創建一個文本框。爲標籤挑選一個mousedown事件,並說「TextBox」.Focus() – tronious

+0

@ user1631520我複製了你的代碼,它對我來說工作正常,即使使用previewmouseclick,其他東西似乎也是問題。 –

+0

感謝您試用KDiTraglia。這實際上很有幫助。我只是切換到MouseLeftButtonUP,它現在可以工作。在我的用戶控件中的一些東西必須抓住焦點。 – tronious

相關問題