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

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

2回答

2048閲覧

xaml 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/08 03:04

編集2016/12/08 04:18

xamlについて質問なんですが、プレフィックス名をボタン押下で変更するにはどうすればよいでしょうか。

以下のような感じです。例を変更しました。
例)
<Window x:Class="SampleApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:SampleApp" xmlns:Components="clr-namespace:SampleApp.Components" Title="MainWindow" Height="100" Width="200">
<Grid>
<Components:A />
<Button Click="BackgroundChange" />
</Grid>
</Window>

ボタンを押したらAの部分をBに変えたいです。
呼び出すファイル(クラス)を変更したいです。

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

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

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

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

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

ozwk

2016/12/08 03:07

どこにある何のプレフィックス名ですか?
piero

2016/12/08 03:33

Mainwindow.xamlの名前空間でxmls:Componet~を定義して。gridの中からComponentに含まれるAというクラスを呼び出して、ボタンを押したらBというクラスの呼び出しに変えたいです。
haru666

2016/12/08 03:45

Grid内のコントロールAをコントロールBに差し替えたい、ということでいいですか?
guest

回答2

0

自分なら A と B をあらかじめ配置、Visibility.Collapsed にしておいて、
ボタンクリックなどのタイミングで Style.Triggers で
Visibility を入れ替えるようにします。

A および B の内容が大きい場合は
MainWindow のデータコンテキストに CurrentViewModel みたいなプロパティを用意し、
A と B それぞれに ViewModel を用意します。
ContentControl の Content プロパティに CurrentViewModel をバインドし、
ボタンクリックのコマンドから CurrentViewModel を A から B、B から A 用のものに入れ替えます。
CurrentViewModel をバインドされた ContentControl はそのままでは UI を表示できないので、
App.Resources などに DataTemplate を定義し、
A の ViewModel のときは A、B の ViewModel のときは B が表示されるようにします。

投稿2016/12/08 03:47

編集2016/12/08 04:40
twyujiro15

総合スコア217

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

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

0

twyujiro15さんの回答の補足です。
ちょっと難易度が高いかなと思うので…詳しくはContentControl WPFで検索してみてください。

データバインディングは知っている想定で部分的なコードを共有します。
知らない場合はこちらも検索してみてください。

XAMLに以下のように記述すればcomponent:Aとcomponent:Bを差し替えることができます。
※全文ではなく部分的な抜き出しです

CSharp

1<!-- ContentControlがcomponentを保持します --> 2<ContentControl Content="{Binding Target}"> 3 <ContentControl.Resources> 4 <!-- バインディングされたTargetの型と表示コンテンツを関連付けることができます。 --> 5 <DataTemplate DataType="{x:Type local:AViewModel}"> 6 <component:A /> 7 </DataTemplate> 8 <DataTemplate DataType="{x:Type local:BViewModel}"> 9 <component:B /> 10 </DataTemplate> 11 </ContentControl.Resources> 12</ContentControl> 13<Button HorizontalAlignment="Left" VerticalAlignment="Top" 14 Content="ボタン" Command="{Binding ChangeTargetCommand}" />

CSharp

1public class Presenter : INotifyPropertyChanged 2{ 3 public event PropertyChangedEventHandler PropertyChanged; 4 5 public object Target 6 { 7 get 8 { 9 return _Target; 10 } 11 set 12 { 13 if (_Target != value) 14 { 15 _Target = value; 16 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Target))); 17 } 18 } 19 } 20 private object _Target = new AViewModel(); 21 22 // Targetプロパティのモデルを、AViewModelからBViewModelに変更するだけのコマンド 23 public ICommand ChangeTargetCommand 24 { 25 get 26 { 27 return _ChangeTargetCommand = _ChangeTargetCommand ?? 28 new DelegateCommand(() => Target = new BViewModel()); 29 } 30 } 31 private ICommand _ChangeTargetCommand; 32}

投稿2016/12/08 08:14

編集2016/12/08 08:19
haru666

総合スコア1591

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問