ヤコブ・クリステンセンが指摘したように、あなたがXamlReader.Load
を使用したい任意のXAMLを読み込むことができます。これはスタイルだけには適用されませんが、UIElement
も同様です。
UIElement rootElement;
FileStream s = new FileStream(fileName, FileMode.Open);
rootElement = (UIElement)XamlReader.Load(s);
s.Close();
などのXAMLをロードするだけです。適切な要素のコンテンツとして設定することができます。
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Foo Bar">
<Grid x:Name="layoutGrid">
<!-- any static elements you might have -->
</Grid>
</Window>
のためにあなたがgrid
にrootElement
を追加することができます:あなたは自然にも手動でコードビハインドでrootElement
内の要素のための任意のイベントを接続する必要があります
layoutGrid.Children.Add(rootElement);
layoutGrid.SetColumn(rootElement, COLUMN);
layoutGrid.SetRow(rootElement, ROW);
。例として、あなたのrootElement
はPath
Sの束とCanvas
が含まれている、あなたはこのようなPath
s'のMouseLeftButtonDown
イベントを割り当てることができます仮定:
Canvas canvas = (Canvas)LogicalTreeHelper.FindLogicalNode(rootElement, "canvas1");
foreach (UIElement ui in LogicalTreeHelper.GetChildren(canvas)) {
System.Windows.Shapes.Path path = ui as System.Windows.Shapes.Path;
if (path != null) {
path.MouseLeftButtonDown += this.LeftButtonDown;
}
}
私はその場でXAMLファイルを切り替えてみましたので、私ていませんでしたそれが本当にうまくいくかどうかは言えません。
こんにちは! これは私が探しているものであるようです。私が欠けている唯一のビットは、ソリューションの一部である.xamlファイルを処理する方法です。私はどうやってそれらをロードするのですか? – djcouchycouch
私が取り組んでいるアプリケーションでは、ソリューションにXAMLファイルを保存し、ビルドアクションを「なし」に設定し、新しい場合はVisual Studioで出力ディレクトリにファイルをコピーします。上記の最初のコードスニペットを使用して読み込みます。 –
ここで私が探していたのは、xamlをリソースとしてロードすることです http://msdn.microsoft.com/en-us/library/aa970494.aspx – djcouchycouch