C# 如何以编程方式设置选项卡顺序
我正在从代码构建一个窗口。 我添加了一个标题文本块,然后为列表框添加了一些不同的元素,其中每个元素都是由 Grid-->children[0]一个文本块,用于解释元素是什么 --->使用文本框或组合框输入数据。 最后是一个按钮 生成后,将焦点放在第一个元素(通常是第一个文本框)上,以便用户可以立即输入数据。在那之前一切都正常 --添加-- 我忘了提到每个元素=网格=文本块+文本框或组合框都是父列表框的元素。因此,我想从每个文本框或组合框中独立地移动,而不依赖于它们所在的listbox元素 之后,我希望用户能够通过TAB移动到下一个元素(textbox或combobox)。因此,在生成以前的窗口时,我使用计数器并设置C# 如何以编程方式设置选项卡顺序,c#,wpf,listbox,focus,tab-ordering,C#,Wpf,Listbox,Focus,Tab Ordering,我正在从代码构建一个窗口。 我添加了一个标题文本块,然后为列表框添加了一些不同的元素,其中每个元素都是由 Grid-->children[0]一个文本块,用于解释元素是什么 --->使用文本框或组合框输入数据。 最后是一个按钮 生成后,将焦点放在第一个元素(通常是第一个文本框)上,以便用户可以立即输入数据。在那之前一切都正常 --添加-- 我忘了提到每个元素=网格=文本块+文本框或组合框都是父列表框的元素。因此,我想从每个文本框或组合框中独立地移动,而不依赖于它们所在的listbox元素 之后
tb.TabIndex = tabIndex++;
或
ComboBox.TabIndex=TabIndex++
现在的问题是,当我按TAB键时,在第一个文本框中输入数据后,插入符号丢失,因此焦点
---地址2---
代码如下:
private void PreparareTraceFieldGrid(ListBox lbTracefields, ObservableCollection<Tuple<string, object, object>> obc, bool IsReadOnly)
{
bool IsFocusSet = false;
/*---TITOLO---*/
OutlinedTextBlock otbTitle = CreateOtbForTraceFieldInputWindow(Languages.Word(eWords.InsertTracefields));
lbTracefields.Items.Add(otbTitle);
/*----CICLO----*/
int tabIndex = 0;
foreach (var item in obc)
{
Grid gridInternal = new Grid();
gridInternal.Background = Brushes.Transparent;
ColumnDefinition cd1 = new ColumnDefinition();
cd1.Width = new GridLength(300, GridUnitType.Pixel);
ColumnDefinition cd2 = new ColumnDefinition();
cd2.Width = new GridLength(1.0, GridUnitType.Star);
gridInternal.ColumnDefinitions.Add(cd1);
gridInternal.ColumnDefinitions.Add(cd2);
OutlinedTextBlock otb = CreateOtbForTraceFieldInputWindow(item.Item1);
otb.FontSize = easyRunData.OptionsGraphical.FontSize;
otb.Stroke = new SolidColorBrush(easyRunData.OptionsGraphical.StrokeColour);
otb.StrokeThickness = easyRunData.OptionsGraphical.StrokeSize;
Grid.SetColumn(otb, 0);
gridInternal.Children.Add(otb);
string strDataType = item.Item2.ToString();
eTraceFieldDataTypes eDataType = (eTraceFieldDataTypes)Enum.Parse(typeof(eTraceFieldDataTypes), strDataType);
switch (eDataType)
{
case eTraceFieldDataTypes.STRING:
case eTraceFieldDataTypes.FLOAT:
case eTraceFieldDataTypes.INTEGER:
case eTraceFieldDataTypes.STRING_READONLY:
TextBox tb = new TextBox();
tb.CaretBrush = Brushes.White;
tb.FontSize = easyRunData.OptionsGraphical.FontSize;
tb.MinWidth = 200;
tb.Height = easyRunData.OptionsGraphical.FontSize + 15;
tb.VerticalAlignment = VerticalAlignment.Center;
tb.Background = Brushes.Transparent;
tb.Margin = new Thickness(10);
tb.TabIndex = tabIndex++;
tb.KeyDown += (senderEvent, args) => { AnalyzeTraceFields_IF_EMPTY(easyRunData.Tracefields.TraceFieldsUser, (Grid)lbTracefields.Parent); };
if (eDataType == eTraceFieldDataTypes.STRING_READONLY && !IsReadOnly)
tb.BorderBrush = Brushes.Yellow;
else
tb.BorderBrush = Brushes.Gainsboro;
Grid.SetColumn(tb, 1);
gridInternal.Children.Add(tb);
lbTracefields.Items.Add(gridInternal);
if (!IsFocusSet)
{
tb.Focus();
IsFocusSet = true;
}
break;
case eTraceFieldDataTypes.BOOL:
case eTraceFieldDataTypes.BOOL_READONLY:
Border brd = new Border();
brd.Margin = new Thickness(10);
brd.MinWidth = 200;
brd.Height = easyRunData.OptionsGraphical.FontSize + 15;
if (eDataType == eTraceFieldDataTypes.BOOL_READONLY && !IsReadOnly)
brd.BorderBrush = Brushes.Yellow;
else
brd.BorderBrush = Brushes.Gainsboro;
brd.BorderThickness = new Thickness(3);
ComboBox cmb = new ComboBox();
cmb.VerticalAlignment = VerticalAlignment.Center;
cmb.Background = Brushes.Transparent;
cmb.Items.Add(Languages.Word(eWords.True));
cmb.Items.Add(Languages.Word(eWords.False));
cmb.BorderBrush = Brushes.Gainsboro;
cmb.BorderThickness = new Thickness(3);
cmb.Margin = new Thickness(0);
cmb.TabIndex = tabIndex++;
cmb.DropDownClosed += (senderEvent, args) => { AnalyzeTraceFields_IF_EMPTY(easyRunData.Tracefields.TraceFieldsUser, (Grid)lbTracefields.Parent); };
Grid.SetColumn(brd, 1);
brd.Child = cmb;
gridInternal.Children.Add(brd);
lbTracefields.Items.Add(gridInternal);
if (!IsFocusSet)
{
cmb.Focus();
IsFocusSet = true;
}
break;
default:
break;
}
}
private void preparearetracefieldGrid(列表框lbTracefields、observeCollection obc、bool为只读)
{
bool-IsFocusSet=false;
/*---提托洛---*/
OutlinedTextBlock otbTitle=CreateOtbForTraceFieldInputWindow(Languages.Word(eWords.InsertTracefields));
lbTracefields.Items.Add(otbTitle);
/*----西克罗----*/
int-tabIndex=0;
foreach(obc中的var项目)
{
Grid gridInternal=新网格();
gridInternal.Background=画笔.透明;
ColumnDefinition cd1=新ColumnDefinition();
cd1.Width=新的GridLength(300,GridUnitType.Pixel);
ColumnDefinition cd2=新ColumnDefinition();
cd2.Width=新的GridLength(1.0,GridUnitType.Star);
gridInternal.ColumnDefinitions.Add(cd1);
gridInternal.ColumnDefinitions.Add(cd2);
OutlinedTextBlock otb=CreateOtbForTraceFieldInputWindow(item.Item1);
otb.FontSize=easyRunData.options图形化.FontSize;
otb.Stroke=新的SolidColorBrush(easyRunData.options图形化.StrokeColour);
otb.strokehickness=easyRunData.options graphical.StrokeSize;
Grid.SetColumn(otb,0);
gridInternal.Children.Add(otb);
字符串strDataType=item.Item2.ToString();
eTraceFieldDataTypes eDataType=(eTraceFieldDataTypes)Enum.Parse(typeof(eTraceFieldDataTypes),strDataType);
开关(eDataType)
{
案例eTraceFieldDataTypes.STRING:
案例eTraceFieldDataTypes.FLOAT:
案例eTraceFieldDataTypes.INTEGER:
案例eTraceFieldDataTypes.STRING\u只读:
TextBox tb=新的TextBox();
tb.CaretBrush=刷子。白色;
tb.FontSize=easyRunData.options graphical.FontSize;
tb.MinWidth=200;
tb.Height=easyRunData.options graphical.FontSize+15;
tb.VerticalAlignment=垂直对齐中心;
tb.Background=画笔.透明;
tb.余量=新厚度(10);
tb.TabIndex=TabIndex++;
tb.KeyDown+=(senderEvent,args)=>{AnalyzeTraceFields\u如果为空(easyRunData.Tracefields.Tracefields,(Grid)lbTracefields.Parent);};
if(eDataType==eTraceFieldDataTypes.STRING_READONLY&&!IsReadOnly)
tb.BorderBrush=画笔.黄色;
其他的
tb.BorderBrush=笔刷.Gainsboro;
Grid.SetColumn(tb,1);
gridInternal.Children.Add(tb);
lbTracefields.Items.Add(gridInternal);
如果(!IsFocusSet)
{
tb.Focus();
IsFocusSet=true;
}
打破
案例eTraceFieldDataTypes.BOOL:
案例eTraceFieldDataTypes.BOOL_只读:
Border brd=新边框();
brd.余量=新厚度(10);
brd.MinWidth=200;
brd.Height=easyRunData.options图形化.FontSize+15;
if(eDataType==eTraceFieldDataTypes.BOOL_READONLY&&!IsReadOnly)
brd.BorderBrush=画笔。黄色;
其他的
brd.BorderBrush=画笔。Gainsboro;
brd.BorderThickness=新厚度(3);
组合框cmb=新组合框();
cmb.VerticalAlignment=垂直对准中心;
cmb.Background=画笔.透明;
cmb.Items.Add(语言.Word(eWords.True));
cmb.Items.Add(语言.Word(eWords.False));
cmb.BorderBrush=笔刷.Gainsboro;
cmb.BorderThickness=新厚度(3);
cmb.余量=新厚度(0);
cmb.TabIndex=TabIndex++;
cmb.DropDownClosed+=(senderEvent,args)=>{AnalyzeTraceFields\u如果为空(easyRunData.Tracefields.TraceFieldsUser,(Grid)lbTracefields.Parent);};
网格设置列(brd,1);
brd.Child=cmb;
gridInternal.Children.Add(brd);
lbTracefields.Items.Add(gridInternal);
如果(!IsFocusSet)
{
cmb.Focus();
IsFocusSet=true;
}
打破
违约:
打破
}
}
我认为看到更多无代码的美丽画面会有所帮助。我知道你想做什么,但我们需要代码。这是你要求的。谢谢你不应该使用