2

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

我尝试将内容控件直接添加到 RootLayout 中,它可以工作。我还尝试通过将 ContentControl 直接添加到第一个堆栈面板(我的主窗口中的那个)中来删除第二层堆栈面板,它也可以工作(我认为)。

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

这是数据模板:

 <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;
    }

将此内容控件添加到堆栈面板的代码:

 //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 日更新:仍然没有运气。我尝试在堆栈面板中创建多个 ItemsControl 而不是 ContentControls。我将该 ItemsControl 添加到我窗口中的包装面板中。现在我可以单击每个列表框的前两项,但所有其他项仍然不可单击且不可编辑。

2012 年 4 月 22 日下午 6:12 更新:计划 Q;我正在尝试使用以下模板解决我的问题。似乎实现了我的目标,我可以更改和编辑文本框,但我最初遇到的问题仍然存在。关于这个问题,我将其更改ContentControlUserControl但没有运气。我终于在 Windows.Forms 应用程序中创建了一个用户控件,并使用 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>
4

0 回答 0