2017-09-14 11 views
0

内のコントロールにフォーカスを設定する私は、次のControlTemplateがありますWPFは、コントロールテンプレート

<ControlTemplate TargetType="dxe:TextEdit" x:Key="TextEditMultiStyle"> 
    <Border x:Name="border" BorderBrush="#054c74" BorderThickness="1" CornerRadius="1"> 
     <Border.Effect> 
      <DropShadowEffect ShadowDepth="0" Color="#0980c2" Opacity="1" BlurRadius="5" /> 
     </Border.Effect> 
     <dxe:TextEdit x:Name="textEdit" TextWrapping="Wrap" AcceptsReturn="True" Text="{TemplateBinding Text}" BorderThickness="0" 
         EditValue="{Binding RelativeSource={RelativeSource TemplatedParent}, 
          Path=EditValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" 
         VerticalContentAlignment="Top"/> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsFocused" Value="true"> 
      <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textEdit}"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

を私は私の窓にテキストボックスを追加し、今ときに、ウィンドウの負荷それにフォーカスを設定したいしています。これまでのところ何も働いていなかったし、ControlTemplate内のTextEditに焦点を合わせる必要があるからだと私は信じている。それはトリガーがやっていることです。

残念ながら、私はトリガーとして指定する必要があることを解決できません。上記のコードは、実行時の苦情を通知するだけです。

System.Windows.Dataエラー:4: 'ElementName = textEdit'という参照でバインド元が見つかりません。 BindingExpression:(パスなし); DataItem = null;ターゲット要素は 'TextEdit'(Name = 'MarkerTextEdit')です。私は、ウィンドウのFocusManagerに設定する必要があると思うので、トリガーが正しいFocusManagerのプロパティを設定するとは確信していません。

(擬似コード) FindAncestor(ウィンドウ).FocusManager.FocusedElement = ControlTemplate.Controls( 'テキストエディット')それはどんな意味がある場合

は、だから、私はと同等のものが必要だと思います。

私がしたいのは、ウィンドウが読み込まれたときにTextBoxにフォーカスが移動されるためです。 WinFormsではばかげて簡単ですが、WPFではロケット科学のようです。

アップデート:私は、次のコードビハインドとしての私の理論を確認したと思う作品:ソリューションはにトリガを変更することです

private void MarkerEditorWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     var control = (UIElement)MarkerTextEdit.Template.FindName("textEdit", MarkerTextEdit); 

     control.Focus(); 
    } 

答えて

0

<Trigger Property="IsFocused" Value="true"> 
      <Setter TargetName="textEdit" Property="FocusManager.FocusedElement" Value="{Binding ElementName=textEdit}"/> 
     </Trigger> 

興味深いことに、これも原因私がXAMLやコードビハインドに何かを入れてもそれを引き起こさない場合でも、TextEditはフォーカスされます。あたかもWPFがそれをやろうとしていたように見えますが、私のテンプレートによって妨げられました。

関連する問題