我有一個這樣的 xaml 代碼
<StackPanel x:Name="stackPanel">
<TextBox>Text</TextBox>
<Button>Content</Button>
<Border>
<StackPanel>
<TextBox>Text</TextBox>
</StackPanel>
</Broder>
</StackPanel>
我正在將此內容作為字串閱讀,并希望在 StackPanel 的第一行之后和父 StackPanel 的 StackPanel 結束之前獲取整個句子。我是說
<TextBox>Text</TextBox>
<Button>Content</Button>
<Border>
<StackPanel>
<TextBox>Text</TextBox>
</StackPanel>
</Broder>
這怎么可能 ??
uj5u.com熱心網友回復:
實際上,這只是關于字串決議或使用 XML-Lib,雖然決議的字串是 XAML,但與 WPF 并不完全相關。
假設 XAML 塊以顯式結束標記 ( </StackPanel>) 結尾,并且您只傳入有問題的標記而不是檔案的完整 XAML,可能與這個大致相處,盡管它可以在某些方面進行改進。尤其是使用正則運算式查找起始標簽時更安全,以避免與擴展另一個標簽名稱的標簽不匹配,例如ListBoxand ListBoxItem。但是對于獲取 StackPanel 的內部 XAML 就足夠了。
const string wholeXAML =
@"<StackPanel x:Name=""stackPanel"">
<TextBox>Text</TextBox>
<Button>Content</Button>
<Border>
<StackPanel>
<TextBox>Text</TextBox>
</StackPanel>
</Border>
</StackPanel>";
var innerXAML = GetInnerXAML(wholeXAML, "StackPanel");
Console.Write($"*{innerXAML}*");
private string GetInnerXAML(string wholeXAML, string tagName) {
var start = $"<{tagName}";
var end = $"</{tagName}>";
var sPos = wholeXAML.IndexOf(start);
var ePos = wholeXAML.LastIndexOf(end);
if (sPos < 0 || ePos < 0) return null;
if (ePos <= sPos) return null;
var innerXAML = wholeXAML.Substring(sPos tagName.Length, ePos - sPos - tagName.Length);
return innerXAML;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520485.html
標籤:C#wpfxml
