質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

1回答

2425閲覧

wpfについて

piero

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/12/20 00:24

MainWindow.xamlに以下の通り記述しています。

<Window x:Class="SampleSystem.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SampleSystem" xmlns:Parts="clr-namespace:SampleSystem.Parts" mc:Ignorable="d" Title="MainWindow" Height="1080" Width="1920">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Parts:Header x:Name="Header" Grid.Row="0" Grid.Column="0" />
<Grid Grid.Row="1" Grid.Column="0">
<Frame Source="Sample1.xaml" />
</Grid>
<Parts:Footer x:Name="Footer" Grid.Row="2" Grid.Column="0" />
<Parts:SideMenu x:Name="SideMenu" Grid.Column="1" Grid.RowSpan="3" />
</Grid>
</Window>

ここからPartsにある部品を読み込んで、Frameを用いてコンテンツ部のみ遷移させるイメージです。
Headerはラジオボタンで6つのボタンを実装しています。
Headerの選択項目に応じてコンテンツ部の内容を変化させたいです。
xamlとc#の記述方法を教えてください。お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hikochang

2017/01/16 11:35

分からないこところの要点を記載しないと回答がつかないと思います。まずこの長いxamlを読む気になれません。
guest

回答1

0

Header のボタンに応じてコンテンツを変えたいだけなら TabControl を使いましょう。
TabItem 配下に各コンテンツを実装します。
1 つの xaml に全部詰め込むと複雑になるので、現実的には各 TabItem の中身を個別の UserControl に実装すると良いでしょう。

以上で解決な気もしますが、違う違う、そうじゃない!そこからさらにコンテンツの中身がどんどん変わっていくんだよという場合は別です。私は以下の方法を採っています。

  1. xaml には中身が空のコンテナーを Name 付きで置きます。
  2. コンテンツ部となるパーツは UserControl でそれぞれ別途実装します。
  3. コードビハインドでコンテンツの切り替えを実装します。

UserControl なら何でもいいので 2 の部分は説明を省き、1 と 3 のポイントだけ書きます。

私は DockPanel をコンテナーに使っているので、その前提で書きます。Frame でもちょっと変わるだけでたぶんできると思います。

###MainWindow.xaml

xaml

1<Window ...> 2 <!-- ... --> 3 <DockPanel Name="contentContainer" ...> 4 </DockPanel > 5 <!-- ... --> 6</Window>

###MainWindow.xaml.cs

cs

1 // ... 2 3 public partial class MainWindow : Window 4 { 5 // ... 6 7 private void ChangeContent(UserControl contentControl) 8 { 9 if (pane != null) 10 { 11 // 中身を空にして入れ替える 12 contentContainer.Children.Clear(); 13 contentContainer.Children.Add(contentControl); 14 // 以下の設定はコンテナーいっぱいに contentControl を配置するための設定 15 contentControl.Width = double.NaN; 16 contentControl.Height = double.NaN; 17 contentControl.SetValue(DockPanel.DockProperty, Dock.Top); 18 } 19 } 20 21 // ... 22 }

ヘッダーのボタンが押されたとき(や、その他コンテンツの中身を変えたい場合)に表示したい UserControl を生成して、ChangeContent メソッドを呼び出します。

投稿2017/05/15 16:15

編集2017/05/15 16:17
toydev

総合スコア297

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問