无法聚焦或选择属于DataTemplate的TextBox

时间:2012-04-22 09:15:47

标签: wpf textbox

我正在尝试为办公室员工创建一个计划应用程序。有关Time In和Time Out的所有信息将使用我正在尝试构建的界面填充。这给我们带来了手头的问题。  我有一个DataTemplate,我正在使用它作为Reuseable ContentControl的一部分。我创建了一个控件列表并将它们添加到StackPanel。最后我将堆栈面板放入另一个堆栈面板。我的问题是我无法聚焦或选择三向深的文本框。有时我可以选择第一个contentcontrol的第一个TextBox然后我可以选择到下一个TextBox。但是我不能在第一个TextBox之后直接选择第二个或任何TextBox。即使是第一个文本框也感觉有一半被阻止,因为我必须点击其中心的左侧才能选择它。

我尝试将内容控件直接添加到RootLayout中,但它确实有效。我还尝试通过将ContentControl直接添加到第一个stackpanel(我的主窗口中的那个)中来删除第二层堆栈面板(我认为)。

有什么想法?如果你们需要更多信息或更详细的代码请告诉我。

这是DataTemplate:

 <DataTemplate x:Key="scheach">
    <Grid Width="94" Background="#FF575A5E" HorizontalAlignment="Left" Height="58" VerticalAlignment="Top" MouseDown="Grid_MouseDown">
        <Grid.RowDefinitions>
            <RowDefinition Height="0.489*"/>
            <RowDefinition Height="0.511*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.514*"/>
            <ColumnDefinition Width="0.486*"/>
        </Grid.ColumnDefinitions>
        <TextBox Margin="3,2,2.299,0" TextWrapping="Wrap" Text="{Binding ATimeIn}" FontSize="13.333" BorderBrush="#FF1A2FE0" Height="24" VerticalAlignment="Top" HorizontalAlignment="Stretch" Width="Auto" IsEnabled="False"/>
        <TextBox Margin="0.701,2,0,0" TextWrapping="Wrap" Text="{Binding ATimeOut}" FontSize="13.333" BorderBrush="#FF1A2FE0" Width="43" HorizontalAlignment="Left" d:LayoutOverrides="Width" Height="24" VerticalAlignment="Top" IsEnabled="False" Grid.Column="1"/>
        <TextBox Margin="3,2.053,2.299,2.204" Grid.Row="1" TextWrapping="Wrap" Text="TextBox"/>
        <TextBox Margin="0.701,2.053,1.983,2.204" Grid.Row="1" TextWrapping="Wrap" Text="TextBox" Grid.Column="1"/>
    </Grid>
    </DataTemplate>

以下是创建内容控制的代码:

public ContentControl GetEachInAndOut(EachSch sch,DateTime date)
    {
        ContentControl cont = new ContentControl();
        cont.DataContext = sch;
        cont.ContentTemplate = (DataTemplate)win.FindResource("scheach");
        return cont;
    }

将此内容控件添加到stackpanel的代码:

 //function called for each user
  public StackPanel GetWeek(DateTime start, DateTime end)
    {
        StackPanel stack = new StackPanel();
        stack.Orientation = Orientation.Horizontal;
        stack.Width = win.Width - 30;
        stack.Margin = new Thickness(2);

        while (true)
        {
            EachSch each = new EachSch();
            stack.Children.Add(GetEachInAndOut(each, temp));
            temp = temp.AddDays(1);
            if (temp == end.AddDays(1))
                break;

        }

        return stack;        
    }
  }

主窗口中的最终代码:

this.stackPanel1.Children.Add(master.GetWeek(DateTime.Now, DateTime.Now.AddDays(6)));

在每个用户上调用上面的函数,最后我有1个以上的堆栈面板;我将这些添加到我窗口中显示的另一个堆栈面板。

2012年4月22日更新:仍然没有运气。 我尝试在stackpanel中创建多个ItemsControl而不是ContentControls。我在我的窗口中将ItemsControl添加到了我的wrappanel。现在我可以点击每个列表框的前两个项目,但是所有其他项目仍然是不可点击和不可编辑的。

2012年4月22日下午6:12更新:计划Q; 我正在尝试使用以下模板解决我的问题。似乎满足了我的目标,我可以更改和编辑文本框,但我仍然遇到的问题仍然存在。关于这个问题,我将ContentControl更改为UserControl,但没有运气。我最终在Windows.Forms应用程序中创建了一个usercontrol,并使用WindowsFormHost导入到WPF中。它有效,但是......不......我不想走那条路。

<ListBox Height="271" HorizontalAlignment="Left" Margin="12,47,0,0" Name="listBox1" VerticalAlignment="Top" Width="814" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock Text="{Binding Barcode}" />
                        <ItemsControl ItemTemplate="{StaticResource scheach}" ItemsPanel="{StaticResource paneltemp}" ItemsSource="{Binding Days}">
                        </ItemsControl>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

0 个答案:

没有答案