WinUI 3 का ऐप डीबग मोड में ठीक चलता है, लेकिन रिलीज बिल्ड बनाने पर यह क्रैश हो जाता है। नीचे दिखाई गई त्रुटि विवरण है।

नियमित विकास के दौरान मुझे ऐसी अजीब समस्याएं बहुत कम मिलती हैं। WinUI 3 ज्यादातर आंतरिक रनटाइम अपवाद फेंकता है, जिससे अपवाद स्टैक से उपयोगी सुराग निकालना मुश्किल हो जाता है।
कई चरणों के उन्मूलन परीक्षण के बाद, मैंने पता लगाया कि पेज के अंदर ViewModel को प्रारंभ करते समय नल संदर्भ के कारण ऐप क्रैश होता है। मेरी प्रोजेक्ट संरचना इस प्रकार है: एक मुख्य विंडो जिसमें साइडबार नेविगेशन मेनू है। मेनू आइटम पर क्लिक करने से दाईं ओर के मुख्य कंटेंट क्षेत्र में लक्षित पेज लोड हो जाते हैं। मुख्य विंडो में उपयोग होने वाला XAML स्निपेट यहां दिया गया है:
<TabView Name="tabView" IsAddTabButtonVisible="False" Margin="10" VerticalAlignment="Stretch" TabCloseRequested="TabView_TabCloseRequested">
<TabViewItem x:Uid="tabConsonant" Name="tvHome">
</TabViewItem>
</TabView>Code language: HTML, XML (xml)
यह TabView दाईं ओर कंटेंट पेज होस्ट करता है। मैं बैकएंड कोड से लक्षित पेज इंस्टेंस को tvHome को असाइन करता हूं:
private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
{
tvHome.Content = new ConsonantsPage();
}Code language: JavaScript (javascript)
आगे की डीबगिंग से पुष्टि हुई कि क्रैश बिल्कुल लक्षित पेज के अंदर this.DataContext = vm; लाइन पर होता है।

फिर मैंने एक नया खाली पेज टेस्ट किया जिसमें कोई DataContext और डेटा बाइंडिंग नहीं था, जो बिना किसी त्रुटि के पूरी तरह से लोड हुआ। इसलिए मूल कारण निश्चित रूप से XAML बाइंडिंग लॉजिक से जुड़ा हुआ है। मैंने मानक MVVM बाइंडिंग का उपयोग बंद कर दिया और समाधान के रूप में कोड-बिहाइंड में प्रोग्रामेटिक रूप से UI एलिमेंट बनाना शुरू किया।
अंतिम कार्यशील समाधान:
सभी कंट्रोल बनाने और मान बाइंडिंग को पूरी तरह से बैकएंड C# कोड से करें:
public TonePage()
{
InitializeComponent();
Loaded += Page_Loaded;
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var toneData = ThaiAlphabetSource.Tones;
FillToneGrid(gvToneList, toneData);
}
private void FillToneGrid(GridView grid, List<ToneInfo> source)
{
foreach (var item in source)
{
Button btnRoot = new Button
{
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center,
Tag = item.Audio
};
btnRoot.Click += PlayClick;
StackPanel sp = new StackPanel
{
Width = 240,
Orientation = Orientation.Vertical,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
TextBlock tbTitle = new TextBlock
{
HorizontalContentAlignment = HorizontalAlignment.Center,
FontSize = 50,
Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0x01, 0xA0, 0xC7)),
Text = item.Letter_Title
};
TextBlock tbName = new TextBlock
{
HorizontalContentAlignment = HorizontalAlignment.Center,
FontSize = 30,
Text = item.Letter_Name
};
TextBlock tbScript = new TextBlock
{
HorizontalContentAlignment = HorizontalAlignment.Center,
FontSize = 30,
Text = item.Letter_Script
};
sp.Children.Add(tbTitle);
sp.Children.Add(tbName);
sp.Children.Add(tbScript);
btnRoot.Content = sp;
grid.Items.Add(btnRoot);
}
}Code language: PHP (php)
मैंने वास्तविक आंतरिक बग का पता लगाने के लिए गहराई से जांच नहीं की, लेकिन मुझे संदेह है कि यह समस्या Command="{Binding PlayCommand}" जैसे कमांड बाइंडिंग सिंटैक्स से उत्पन्न हुई है। एक अन्य परीक्षण केस इस धारणा का समर्थन करता है: जिन पेज में केवल प्रॉपर्टी बाइंडिंग है और कोई कमांड बाइंडिंग नहीं है, वे बिना किसी परेशानी के चलते हैं, जैसा नीचे दिखाया गया है:
<Button Content="{Binding}" Grid.Row="0" Grid.Column="1" BorderBrush="#ccc" Foreground="Black" FontSize="50" Height="100" Width="130" Click="Button_Click"/>Code language: HTML, XML (xml)
यह संस्करण रिलीज कॉन्फ़िगरेशन में सामान्य रूप से काम करता है।