在我的代码中,我有一个UIElement变量,我设置了某些按钮按下。 现在,我有这个变量:
public UIElement currentMenu;
设置为此值:
currentMenu = (UIElement)Resources["Home"];
我从资源中获取它,所以我不必在代码隐藏中乱码,在解决此问题后,我会将资源导出到单独的ResourceDictionary。
我的SplitView看起来像这样:
<SplitView x:Name="NavPane" OpenPaneLength="250" CompactPaneLength="50" Content="{x:Bind currentMenu}" DisplayMode="CompactOverlay" IsPaneOpen="False" PaneClosing="NavPane_PaneClosing">
此时prblem进来了,Binding使用unhndled win32异常崩溃了整个应用程序。我没有得到任何描述,错误代码每次都会改变。我已经用断点检查了这种行为是否实际上是由绑定引起的,而且是。
如果您对此处可能出现的问题有任何建议,请发表回答。我将提供所需的任何其他信息(如果合理,我不会将您的整个项目文件发送给您)
感谢任何帮助!
答案 0 :(得分:0)
您使用变量而不是属性的问题。
private UIElement currentMenu;
public string CurrentMenu
{
get { return currentMenu; }
set {
currentMenu=value);
OnPropertyChanged("CurrentMenu");
}
}
所以将Control绑定到“可变”的基本规则:
public
。要通知用户界面,您应该实施INotifyPropertyChanged
:
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
<强>更新强>
您的Bidning
应如下:
<SplitView x:Name="NavPane" OpenPaneLength="250" CompactPaneLength="50"
Content="{Binding CurrentMenu}" DisplayMode="CompactOverlay" IsPaneOpen="False"
PaneClosing="NavPane_PaneClosing">
答案 1 :(得分:0)
我找到了问题的答案!
即,这不是这样做的方法。相反,我在SplitView的内容中声明了一个Frame:
<SplitView.Content>
<Frame x:Name="activeMenu"/>
</SplitView.Content>
然后,我使用Frame.Navigate()函数将菜单加载到Frame:
public MainPage()
{
DataContext = this;
this.InitializeComponent();
SetMenu(0);
}
private void SetMenu(int key)
{
switch (key)
{
case 0:
activeMenu.Navigate(typeof(HomeMenu));
break;
//You can add in as many cases as you need
}
}
您需要将所需的所有菜单设置为项目文件中的单独页面。在此示例中,HomeMenu.xaml包含人们在启动应用程序时看到的菜单的网格。
这解决了这个问题,但是感谢所有为原始(不幸的是不成功)解决方案做出贡献的人(StepUp)!