나는 다음은 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'); 'FocusedElement'(유형 'IInputElement')
나는 또한 Window의 FocusManager에 설정해야한다고 생각하기 때문에 트리거가 정확한 FocusManager의 속성을 설정한다고 확신하지 못합니다.
(의사 코드) FindAncestor (윈도우) .FocusManager.FocusedElement = ControlTemplate.Controls ('텍스트 편집기')이 어떤 의미가있는 경우
:
그래서 난에 해당 무언가를 필요가 있다고 생각합니다.내가하고 싶은 것은 윈도우가로드 될 때 TextBox에 포커스를 가져 오기만하면 모든 제안을 환영합니다. WinForms에서는 어리 석으나 WPF에서는 로켓 과학처럼 보입니다.
업데이트 : 나는 같은 내 이론을 확인했습니다 생각하는 코드 숨김 작동 다음
<Trigger Property="IsFocused" Value="true">
<Setter TargetName="textEdit" Property="FocusManager.FocusedElement" Value="{Binding ElementName=textEdit}"/>
</Trigger>
흥미롭게도,이 또한 원인 :
private void MarkerEditorWindow_Loaded(object sender, RoutedEventArgs e)
{
var control = (UIElement)MarkerTextEdit.Template.FindName("textEdit", MarkerTextEdit);
control.Focus();
}