我正在尝试为办公室员工创建一个计划应用程序。有关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>