【发布时间】:2021-03-06 08:46:03
【问题描述】:
我的窗口架构是一个 Mainwindow.xaml,其中包含许多用户控件,即:Pesos.xaml 和 Materiales.xaml。问题是当用户单击任何“Materiales.xaml”组件时,“Pesos.xaml”中的焦点文本框元素会失去焦点。 我试图添加一个公共属性,它返回关于我感兴趣的“比索”用户控件的文本框,但没有成功。 此刻对我来说足够了,当“材料”用户控件引发 keyup 事件时,焦点转到“比索”用户组件文本框。这是 Pesos.cs.xaml,首先您可以看到 BuscadorTexto 公共属性,以便从用户控件之外访问它。其次,我有 UserControl_GotFocus(),当从 Materiales 用户控件接收到焦点时,由于 DataContext 为空,它将引发异常:
public partial class Pesos : UserControl
{
public Pesos()
{
InitializeComponent();
}
bool txtPesoFocus = false;
public TextBox BuscadorTexto {
get { return this.txtBuscador; }
}
...
private void UserControl_GotFocus(object sender, RoutedEventArgs e)
{
if (!((ViewModel.PuestoViewModel)DataContext).IsMaterialValido.GetValueOrDefault())
this.txtBuscador.Focus();
else if (((ViewModel.PuestoViewModel)DataContext).IsMaterialValido.GetValueOrDefault()
&& ((ViewModel.PuestoViewModel)DataContext).SelectedBascula.Tipo == Comun.TipoMaquina.Manual)
txtPeso.Focus();
}
}
这是 Materiales.cs:
<UserControl x:Class="A99.AsuaProducts.Ensayos.Controles.Puestos.OfMateriales"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:A99.AsuaProducts.Ensayos.Controles.Puestos"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" >
<Grid>
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
...
</Grid.ColumnDefinitions>
</Grid>
<DataGrid x:Name="MetroDataGrid"
ItemsSource="{Binding ListaOfIteracionMaterialesMaquina}"
SelectedItem="{Binding SelectedOfIteracionMaterial}"
Grid.Row="1"
Margin="2"
AutoGenerateColumns="False"
HeadersVisibility="All"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
CanUserResizeColumns="False"
IsReadOnly="True"
SelectionUnit="FullRow"
Focusable="False"
KeyUp="MetroDataGrid_KeyUp">
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
...
</UserControl>
这是背后的 Materiales 代码:
public partial class OfMateriales : UserControl
{
public OfMateriales()
{
InitializeComponent();
}
private void Button_GotFocus(object sender, RoutedEventArgs e)
{
MessageBox.Show("Ojo que siguiente tiene el foco");
}
private void MetroDataGrid_KeyUp(object sender, KeyEventArgs e)
{
Pesos uc = new Pesos();
uc.BuscadorTexto.Text = "KK";
uc.BuscadorTexto.Focus();
}
}
如您所见,我尝试编辑 textBox 内容并设置焦点但完全没有效果。
【问题讨论】: