2

私はオフィスの従業員のためのスケジューリングアプリケーションを作成しようとしています。タイムアウトとタイムアウトに関するすべての情報は、私が構築しようとしているインターフェイスを使用して入力されます。それは私たちに問題をもたらします。ReuseableContentControlの一部として使用しているDataTemplateがあります。それらのコントロールのリストを作成し、StackPanelに追加します。最後に、そのスタックパネルを別のスタックパネルに配置します。私の問題は、3方向の深さのテキストボックスにフォーカスまたは選択できないことです。いつか、最初のcontentcontrolの最初のTextBoxを選択してから、次のTextBoxにTabキーで移動できます。しかし、最初のTextBoxの後にその2番目または任意のTextBoxを直接選択することはできません。最初のテキストボックスでさえ、選択できるように中央の左側をクリックする必要があるため、半分がブロックされているように感じます。

コンテンツコントロールをRootLayoutに直接追加しようとしましたが、機能します。また、ContentControlを最初のスタックパネル(メインウィンドウにあるもの)に直接追加して、2番目のレイヤーのスタックパネルを削除しようとしましたが、これも機能します(私は思います)。

何かご意見は?コードの詳細や詳細が必要な場合は、お知らせください。

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日更新:まだ運がない。スタックパネル内にContentControlsではなく複数のItemsControlを作成しようとしました。そのItemsControlをウィンドウのラップパネルに追加しました。これで、各リストボックスの最初の2つの項目をクリックできますが、他のすべての項目はクリックできず、編集できません。

2012年4月22日午後6時12分更新:プランQ; 次のテンプレートを使用して問題を解決しようとしています。目的を達成しているようで、テキストボックスを変更および編集できますが、通常発生した問題はまだ残っています。問題に関して、私はに変更しContentControlましたUserControlが、運がありません。最後に、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