[英]DataTemplate not used when WPF control is opened within Windows Form Control
[英]WPF - Focus Control Within DataTemplate applied to FlyoutControl
我有一个包含文本框的DataTemplate。 DataTemplate绑定到DevExpress FlyoutControl的样式的ContentTemplate属性。 弹出控件本身在另一个TextBox的ControlTemplate中。
当带有FlyoutControl的TextBox处于焦点状态时,我想将焦点重定向到FlyoutControl的ContentTemplate中的第一个TextBox(来自DataTemplate)。 在我要聚焦的TextBox上设置FocusManager.FocusedElement = {Binding RelativeSource = {RelativeSource Self}}会在第一次完成此操作,但是一旦Flyout加载后,它将不再起作用。
我尝试了所有可以找到的建议,但到目前为止没有任何效果。 我可以在代码中获取要引用的TextBox并调用Focus(),但它始终返回false。 充其量,当我尝试将其聚焦于代码时,Flyout会被聚焦,而不是Flyout中的TextBox。
这是每个相关部分的样子(省略了无关的代码):
<DataTemplate x:Key="FlyoutTemplate">
<Grid>
<dxe:TextEdit x:Name="TextThatWantsFocus"
FocusManager.FocusedElement={Binding RelativeSource={RelativeSource Self}}" />
</Grid>
</DataTemplate>
...
<Style x:Key="FlyoutStyle" TargetType="dxe:FlyoutControl">
<Setter Property="ContentTemplate" Value="{StaticResource FlyoutTemplate}"/>
</Style>
...
<dxe:TextEdit>
<dxe:TextEdit.Template>
<ControlTemplate>
<StackPanel>
<dxe:TextEdit x:Name="InnerTextEdit" />
<dxe:FlyoutControl Style="{StaticResource FlyoutStyle}"/>
</StackPanel>
</ControlTemplate>
</dxe:TextEdit.Template>
</dxe:TextEdit>
正在使用代码打开弹出按钮。 在这里,我也想重点关注TextBox(TextThatWantsFocus)。 但是,我尝试过的所有操作都不会给它焦点(除了FocusManager第一次处理它以外),包括涉及触发器的典型SO答案。 任何想法将不胜感激。
我接受了DmitryG的建议,并提交了DevExpress支持票,他们能够提供解决方案。
通过处理我要关注的TextEdit的Loaded事件并使用分派器对其进行关注,已解决了该问题:
private void TextThatWantsFocus_Loaded(object obj, RoutedEventArgs e)
{
var text = obj as FrameworkElement;
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate()
{ text.Focus(); }));
}
我建议您使用DevExpress MVVM Framework中的FocusBehavior:
<DataTemplate x:Key="FlyoutTemplate">
<Grid>
<dxe:TextEdit>
<dxmvvm:Interaction.Behaviors>
<local:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</dxe:TextEdit>
</Grid>
</DataTemplate>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.