5

動的 xml リテラル/埋め込み式を介して作成する必要がある XElement があり、デフォルトの名前空間を継承する必要があります。私が試したすべてのことを通して、これは可能ではないようです。これを機能させる方法を知っている人はいますか?

例えば

Imports <xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
Sub CreateXAML()
        Dim obj = "Rectangle"
        Dim objFill As String = obj & ".Fill"
        Dim myXML As XElement = <<%= obj %>><<%= objFill %>>no namespace</></>

        Dim myXML2 As XElement = <Path><Path.Fill>inherits namespace</Path.Fill></Path>
        MsgBox(myXML.ToString & vbCrLf & myXML2.ToString)
End Sub

最初myXMLの はデフォルトの ns では作成されませんが、2 番目の は作成されますmyXML2

4

1 に答える 1

3

これは、 http://msdn.microsoft.com/en-us/library/bb675177.aspxの「グローバル名前空間と埋め込み式」セクションに記載されていますが、この記事では回避策や解決策を提供していません。私も以前にこの必要性があり、試行錯誤を繰り返しただけで、次のように、名前空間を2つ使用して要素を事前に作成することで、この必要性を機能させることができました。

Imports <xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
Sub CreateXAML()
    Dim shape = "Rectangle"
    Dim obj = <<%= "{http://schemas.microsoft.com/winfx/2006/xaml/presentation}" & shape %>></>
    Dim objFill = <<%= "{http://schemas.microsoft.com/winfx/2006/xaml/presentation}" & shape %>></>
    Dim myXML As XElement = <<%= obj %>><<%= objFill %>>has namespace</></>

    Dim myXML2 As XElement = <Rectangle><Rectangle.Fill>inherits namespace</Rectangle.Fill></Rectangle>
    MsgBox(myXML.ToString & vbCrLf & myXML2.ToString)
End Sub

なぜ「インポート」ステートメントがまだそこにあるのか不思議に思うかもしれません。これは、非動的XElementを追加してグローバル名前空間を継承する場合に使用されます。このような:

<<%= obj %>><<%= objFill %>><Text>has namespace</Text></></>
于 2010-02-07T03:07:37.583 に答える