Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式设置选项卡顺序_C#_Wpf_Listbox_Focus_Tab Ordering - Fatal编程技术网

C# 如何以编程方式设置选项卡顺序

C# 如何以编程方式设置选项卡顺序,c#,wpf,listbox,focus,tab-ordering,C#,Wpf,Listbox,Focus,Tab Ordering,我正在从代码构建一个窗口。 我添加了一个标题文本块,然后为列表框添加了一些不同的元素,其中每个元素都是由 Grid-->children[0]一个文本块,用于解释元素是什么 --->使用文本框或组合框输入数据。 最后是一个按钮 生成后,将焦点放在第一个元素(通常是第一个文本框)上,以便用户可以立即输入数据。在那之前一切都正常 --添加-- 我忘了提到每个元素=网格=文本块+文本框或组合框都是父列表框的元素。因此,我想从每个文本框或组合框中独立地移动,而不依赖于它们所在的listbox元素 之后

我正在从代码构建一个窗口。 我添加了一个标题文本块,然后为列表框添加了一些不同的元素,其中每个元素都是由 Grid-->children[0]一个文本块,用于解释元素是什么 --->使用文本框或组合框输入数据。 最后是一个按钮

生成后,将焦点放在第一个元素(通常是第一个文本框)上,以便用户可以立即输入数据。在那之前一切都正常

--添加-- 我忘了提到每个元素=网格=文本块+文本框或组合框都是父列表框的元素。因此,我想从每个文本框或组合框中独立地移动,而不依赖于它们所在的listbox元素

之后,我希望用户能够通过TAB移动到下一个元素(textbox或combobox)。因此,在生成以前的窗口时,我使用计数器并设置

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;
}
打破
违约:
打破
}
}

我认为看到更多无代码的美丽画面会有所帮助。我知道你想做什么,但我们需要代码。这是你要求的。谢谢你不应该使用