私はオフィスの従業員のためのスケジューリングアプリケーションを作成しようとしています。タイムアウトとタイムアウトに関するすべての情報は、私が構築しようとしているインターフェイスを使用して入力されます。それは私たちに問題をもたらします。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>