none
ウインドウが開いたときのフォーカスの位置について RRS feed

  • 質問

  • お世話になっております。

    例えば、テキストボックスだけがあるウインドウが開かれたとき、
    MFCアプリであれば、テキストボックスにフォーカスが当たっていて、すぐに入力できたのですが、
    WPFでは自然にそうなってくれません。
    コードビハインドで書けばできるようですが、例えば、下記の場合、

    <Window x:Class="DialogWnd.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    	<Grid Margin="5">
    		<TextBox Name="uiTextBox"></TextBox>
    	</Grid>
    </Window>
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
         uiTextBox.Focus();
    }
    

    というのが、WPFのやり方なのでしょうか? XAMLだけでは書けないのでしょうか?
     

    2010年2月3日 13:56

回答

  • ルート要素(普通は Window ですね)で、FocusManager の FocusedElement 添付プロパティを、初期フォーカスを与える要素に Binding(ElementName を使って指定)すればいいでしょう。
    • 回答としてマーク Yo48 2010年2月4日 14:28
    2010年2月3日 14:32
  • FocusManagerを使用することで期待する動作を実現することができます。
    実装例はこんな感じです。
    <Window x:Class="DialogWnd.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300"
        FocusManager.FocusedElement="{Binding ElementName= uiTextBox}">
    	<Grid Margin="5">
    		<TextBox Name="uiTextBox"></TextBox>
    	</Grid>
    </Window>
    

    • 回答としてマーク Yo48 2010年2月4日 14:28
    2010年2月3日 14:34

すべての返信

  • ルート要素(普通は Window ですね)で、FocusManager の FocusedElement 添付プロパティを、初期フォーカスを与える要素に Binding(ElementName を使って指定)すればいいでしょう。
    • 回答としてマーク Yo48 2010年2月4日 14:28
    2010年2月3日 14:32
  • FocusManagerを使用することで期待する動作を実現することができます。
    実装例はこんな感じです。
    <Window x:Class="DialogWnd.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300"
        FocusManager.FocusedElement="{Binding ElementName= uiTextBox}">
    	<Grid Margin="5">
    		<TextBox Name="uiTextBox"></TextBox>
    	</Grid>
    </Window>
    

    • 回答としてマーク Yo48 2010年2月4日 14:28
    2010年2月3日 14:34
  • Hongliangさん、えいとさん、
    ありがとうございます。

    簡単なことだったんですね。
    FocusManagerは目に留まっていたのですが。

    やってなかったところだけが試験問題に出た気分です。
    2010年2月4日 14:28