我在我的主窗框,其被设置为可见/折叠基于用户输入:如何访问框架的子元素?
<Grid>
<ScrollViewer x:Name="ScrollViewer1" Grid.Row="1" Grid.ColumnSpan="3" Margin="10,0,0,0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<Frame Name="InputsFrame" Source="Inputs.xaml" NavigationUIVisibility="Hidden" Visibility="Visible"
ScrollViewer.CanContentScroll="True" />
</ScrollViewer>
<ScrollViewer x:Name="ScrollViewer2" Grid.Row="1" Grid.ColumnSpan="3" Margin="10,0,0,0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Visibility="Collapsed">
<Frame Name="LoadCasesFrame" Source="LoadCases.xaml" NavigationUIVisibility="Hidden" Visibility="Collapsed"
ScrollViewer.CanContentScroll="True" />
</ScrollViewer>
<!-- etc -->
</Grid>
的Inputs.xaml帧基本上只是由一个第三方DoubleTextBox控制的(在他们的100),和用户可以输入该页面的值。后面的C#代码:
private void InputsTab_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
LoadCasesFrame.Visibility = Visibility.Collapsed;
ScrollViewer2.Visibility = Visibility.Collapsed;
InputsFrame.Visibility = Visibility.Visible;
ScrollViewer1.Visibility = Visibility.Visible;
}
在这个主窗口中,在顶部有一个菜单允许保存和打开文件。当我打开文件时,我想要读取数据(我可以成功完成)以及Inputs.xaml文件中的UI以进行更新。
下面的代码是在Inputs.xaml.cs:
public void LoadValues()
{
List<DoubleTextBox> dtb1 = App.GetLogicalChildCollection<DoubleTextBox>(inputsGrid);
for (int i = 0; i < dtb1.Count; i++)
{
foreach (var keyValuePair in App.globalDictionary)
{
var doubleTextBox = dtb1[i] as DoubleTextBox;
if (doubleTextBox.Name == keyValuePair.Key)
{
doubleTextBox.Value = 500;
break;
}
}
}
}
此功能(所有的GUI更新到500的值),当我把它从Inputs.xml.cs页面(例如,当我把它放在Page_Loaded
事件中)。但是,我需要从MainWindow
调用这个函数,因为这是为打开文件事件的事件处理程序位于:
private void openProject_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == true)
{
string stringToDeserialize = File.ReadAllText(openFileDialog.FileName);
App.DeserializeJSONString(stringToDeserialize);
}
// call LoadValues here
}
以上调用LoadValues()
不更新的Input.xaml页的GUI。我本来在我的MainWindow
是这样的:
Inputs _inputs = new Inputs();
_inputs.LoadValues();
我知道,问题是,我创建了一个新的对象Inputs
那可能是为什么它不工作。我不确定如何去做,所以我不使用新的对象 - 不知道我是否可以使用InputsFrame
。我也尝试过使用事件处理程序来取得成功。
我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –
为了将来的参考,请尝试将问题描述限制为只理解问题所需的基本要素,并确保问题标题准确地描述了手边的_primary_问题(而不是像您尝试的某种特定的解决方法策略) 。在上文中,我相信有关文件开放的讨论是不相关的;它只是模糊了被问到的主要问题。 –
JohnSaunders&@PeterDuniho:感谢您的评论和编辑。我试图尽可能清楚和简单。我将铭记未来的问题。 – greentea