実現したいこと
・ボタンクリックで動的に作成したタブの中に、別に作成した子画面の内容を表示させたい。
ToDoボタンをクリックしたときに、動的にタブを追加しています。
追加されたタブの中に自作のカレンダー画面を表示させたいと思っているのですが。
画面をタブの中に埋め込むような形で表示させることを可能ですか?
・TabControlの表示/非表示を切り替えたい
起動時は指定した画像を表示させるようにしている(TabControlを非表示に設定)のですが、ToDoボタンがクリックされたときは画像を非表示に、TabControlを表示させたいと考えています。
ToDoボタンはAddTabItemToDoCommandでBindingしているのですが、連動して別の処理を実行させるような方法はありますか?
よろしくお願いいたします。
ソース
xml:MainWindow.xaml
1<Window x:Class="WpfApp.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:vm="clr-namespace:WpfApp.ViewModel" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="450" Width="800"> 9 10 <Window.DataContext> 11 <vm:MainViewModel /> 12 </Window.DataContext> 13 14 <Grid> 15 <Grid.RowDefinitions> 16 <RowDefinition Height="Auto" /> 17 <RowDefinition /> 18 <RowDefinition Height="AUto"/> 19 </Grid.RowDefinitions> 20 <Grid.ColumnDefinitions> 21 <ColumnDefinition Width="2*"/> 22 <ColumnDefinition Width="8*"/> 23 </Grid.ColumnDefinitions> 24 25 <GroupBox Grid.Row="1" Grid.Column="0" 26 Margin="1" Background="Papayawhip"> 27 <StackPanel> 28 <Button Command="{Binding AddTabItemToDoCommand}" Style="{StaticResource FlatButton}"> 29 <!-- ボタンの中に表示する内容 --> 30 <TextBlock Text="ToDo" HorizontalAlignment="Center" VerticalAlignment="Center"/> 31 </Button> 32 </StackPanel> 33 </GroupBox> 34 35 <Image Source="{Binding BackgroundImage}" Stretch="Uniform" Grid.Row="1" Grid.Column="1"/> 36 <TabControl x:Name="tabControl" ItemsSource="{Binding TabItems}" Grid.Row="1" Grid.Column="1" > 37 <TabControl.ItemTemplate> 38 <!--ヘッダテンプレート--> 39 <DataTemplate> 40 <TextBlock Text="{Binding TabHeader}" /> 41 </DataTemplate> 42 </TabControl.ItemTemplate> 43 44 <TabControl.ContentTemplate> 45 <!--TabItemのコンテンツ--> 46 <DataTemplate> 47 <TextBlock Text="{Binding TabContent}" /> 48 </DataTemplate> 49 </TabControl.ContentTemplate> 50 </TabControl> 51 52 53 <!--ステータスバー--> 54 <TextBlock x:Name="StatusBar_Text" Grid.Row="2" HorizontalAlignment="Right"/> 55 56 </Grid> 57</Window>
c#:ViewModel
1namespace WpfApp.ViewModel 2{ 3 public class MainViewModel : BindableBase 4 { 5 private ImageSource _backgroundImage = null; 6 7 /// <summary> 8 /// メイン画面の背景 9 /// </summary> 10 public ImageSource BackgroundImage 11 { 12 get { return this._backgroundImage; } 13 set 14 { 15 this.SetProperty(ref this._backgroundImage, value); 16 } 17 } 18 19 /// <summary> 20 /// TabItemカレンダー画面追加コマンド 21 /// </summary> 22 public DelegateCommand AddTabItemToDoCommand{ get; } 23 24 /// <summary> 25 /// TabItemデータコレクション 26 /// </summary> 27 public ObservableCollection<TabItemData> TabItems { get; set; } = new ObservableCollection<TabItemData>(); 28 29 public MainViewModel() 30 { 31 // Main画面の画像の表示 32 BackgroundImage = new BitmapImage(new Uri("pack://application:,,,/Resources/BackgroundImage.jpg")); 33 34 this.AddTabItemToDoCommand= new DelegateCommand(() => 35 { 36 this.TabItems.Add(new TabItemData() { TabHeader = "ToDo", TabContent = "カレンダー的のものを表示させる予定" }); 37 }, () => string.IsNullOrEmpty(null)); 38 } 39 } 40 41 /// <summary> 42 /// TabItemを管理 43 /// </summary> 44 public class TabItemData 45 { 46 public string TabHeader { get; set; } 47 48 public string TabContent { get; set; } 49 } 50}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/15 11:55 編集
2020/12/15 11:58
退会済みユーザー
2020/12/17 05:27